নতুন সিনেমা যুক্ত করার সময় ভিএলসি "ফোল্ডার প্লেলিস্ট দেখুন" স্বয়ংক্রিয় আপডেট / রিফ্রেশ প্লেলিস্ট


3

এই কাজ করতে একটি উপায় আছে কি?

আমি একটি স্বয়ংক্রিয় প্লেলিস্ট সহ পূর্ণ স্ক্রিন মোডে ভিএলসি চালাতে চাই। প্লেলিস্ট একটি ফোল্ডার হতে হবে, বলুন/home/user/videos

দিনের বেলা আমি এই প্লেলিস্ট সহ ভিএলসি চালিত কম্পিউটারে কিছু সিনেমা আপলোড করতে চাই। আমি এতে একটি সিনেমা আপলোড করি/home/user/videos

প্লেলিস্টে পরিবর্তনগুলি প্রভাবিত করতে এখন আমার ভিএলসি পুনরায় লোড / পুনঃসূচনা করতে হবে।

ভিএলসি পুনরায় চালু না করে প্লেলিস্টটি রিফ্রেশ করার কোনও উপায় আছে কি? হতে পারে এটি প্রতি X মিনিটে নতুন কিছু ফাইল বা কিছু পরীক্ষা করতে দেয়?


আপনি কি এর জন্য কোনও সমাধান খুঁজে পেয়েছেন?
হুপসেব

@ হুপসেব এখনও হয়নি, তবে প্রকল্পটি একটি বিরতিতে রয়েছে, এবং আমি 2 সপ্তাহের মধ্যে আবার এটি শুরু করতে চলেছি। আমি এই জন্য একটি সমাধান খুঁজে বের আপনাকে তা জানাবে - আপনি ইতিমধ্যে না, আমাকে দয়া করে :)
Bolli

এখানে এটি পেয়েছেন ... youtube.com/watch?v=Kim5QM0nKfQ তবে এর জন্য vlc আবার খোলা দরকার।
হুপসেব

@hupseb আমি আমার সমাধানটি নীচে পোস্ট করেছি। আপনি কি কোনও সমাধান খুঁজে পেয়েছেন?
বলি

উত্তর:


1

আমি প্রথমে একটি ভিএলসি এলইউ এক্সটেনশন লেখার সম্ভাবনাগুলি দেখেছি এবং এটি খুব সম্ভব ams

আমি এই এক্সটেনশনের দিকে নজর রেখেছি: http://addons.videolan.org/CONTENT/content-files/140699-addsimarr.lua

যার আমাদের প্রয়োজনীয় সমস্ত কার্যকারিতা রয়েছে। সুতরাং এটির ভারী পরিবর্তন করা সঠিকভাবে কাজ করবে তবে এটি এই প্রকল্পের জন্য খুব বেশি কাজ হিসাবে কাজ করেছে।

তাই আমি আরও কিছুটা গুগল করেছিলাম এবং এই সাইটটিকে হোঁচট খাচ্ছি: http://www.cenolan.com/2013/03/looping-video-playlist-omxplayer-raspberry-pi/

দেখা যাচ্ছে যে এই ব্যাশ স্ক্রিপ্টটি সহজেই ভিএলসি বা সিভিএলসি ব্যবহার করতে সংশোধন করা যেতে পারে।

সুতরাং আমি করেছি এবং ফলাফলটি এরকম দেখাচ্ছে:

#!/bin/sh

# get rid of the cursor so we don't see it when videos are running
setterm -cursor off

#Time 
TIME=$(date +%H)

# set here the path to the directory containing your videos
VIDEOPATH="/home/user/videos" 

# you can normally leave this alone
SERVICE="cvlc"

# now for our infinite loop!
while true; do
        if ps ax | grep -v grep | grep $SERVICE > /dev/null
        then
        sleep 0;
else
        for entry in $VIDEOPATH/* # You could add .mkv to the end of this or any other file extention, to only play specific extentions
        do
             cvlc --play-and-exit --no-video-title -f "$entry" > /dev/null

        done

fi
done

আমার এই কার্যকারিতাটির কারণ হ'ল প্রকল্পের মতো একটি কিওস্ক ভিডিও স্ক্রিনের জন্য, যেখানে ভিডিওগুলি সর্বদা আপলোড করা এবং মোছা হয়।

এই সমাধান সম্পর্কে একটি কনসটি হ'ল প্রতিটি ভিডিও প্লে করার পরে ভিএলসিকে এখনও খোলার এবং বন্ধ করা দরকার যা এটি এই স্ক্রিপ্টটি ব্যবহার করে। স্ক্রিপ্টটি চালাওয়ার পিসির জন্য একটি ফাঁকা ডেস্কটপ (জিইউআই সরানো) এবং একটি কালো পটভূমি থাকা দরকার। এইভাবে আপনি প্রতিটি ভিডিও ক্লিপের মধ্যে প্রায় 0.5 - 1 সেকেন্ডের কালো পর্দা দেখতে পাবেন।

স্ক্রিপ্টটি এখনও চলছে, যেহেতু আমি এতে আরও কয়েকটি বৈশিষ্ট্য যুক্ত করব, সুতরাং আপনি যদি এটি দরকারী মনে করেন এবং আমার চূড়ান্ত স্ক্রিপ্ট চান, তবে একটি মন্তব্য দিন এবং আমি উত্তরটি আপডেট করব।

আপনার যদি আরও ভাল সমাধান বা এমনকি LUA সমাধান থাকে তবে দয়া করে এটি পোস্ট করুন - এবং আমি উত্তরটি গ্রহণ করব - তবে আপাতত এটি আমার প্রকল্পের জন্য কাজ করে।

চিয়ার্স

দ্য ফ্রস্টের অনুরোধে আপডেট করুন

এখানে আমার চূড়ান্ত স্ক্রিপ্ট, আমি নীচে এটি সংক্ষেপে বর্ণনা করব: play.sh

#!/bin/bash

xsetroot

# Set the path to the directory containing your videos
VIDEOPATH="/home/pi/vids/" 

# Time & day
set_TIME() {
TIME=$(date +%H)
DAY=$(date +%u) 
}

set_TIME

# Normally leave this alone
SERVICE="omxplayer"

# Get rid of the cursor so we don't see it when videos are running
setterm -cursor off

# # #
#
#  Play files with omxplayer and close the player when the video is finished
#
# # #
play_files () {
 for entry in $1*
    do
    set_TIME
        # Dont try to play dirs
        if [ ! -d "$entry" ]; then 

            omxplayer -p -o hdmi "$entry" > /dev/null
        fi
    done  
} 

# # #
#
#  Check if its time to play files
#  $1 = hour now, $2 = begin hour, $3 = End hour, $4 = folder with video files
#
# # #
check_if_time_to_play() {

  # Make sure the arguments are interpreted as *decimal* integers
  # by evaluating them in an arithmetic context (-i) with prefix '10#', 
  # indicating number base 10.
  # (A leading '0' would cause intepretation as *octal*.)
  local -i hourNow=10#$1 startHour=10#$2 endHour=10#$3 play
  local dir=$4

  # Make sure the folder is not empty.
  if ! find "$dir" -mindepth 1 -print -quit | grep -q .; then
    return # It's empty! Don't play the non-existing clips. 
  fi

  # Determine if current hour is between begin and end time.
  play=0
  if (( startHour < endHour )); then
    if (( hourNow >= startHour && hourNow < endHour )); then
      play=1
    fi
  else # startHour > endHour: overnight hours
    if (( hourNow >= startHour || hourNow < endHour )); then
      play=1
    fi
  fi

  if (( play )); then
    # Play the clips
    play_files "$dir" 
  else
     : # Current hour is not in range, don't play the clips.
  fi
}

# Now for our infinite loop!
while true; do
        if ps ax | grep -v grep | grep $SERVICE > /dev/null
        then
        sleep 0;
else

# # #
#
#  First we check the Video folder if it has any subfolders.
#  If it doesn't, play the files in the folder.
#  If subfolders exists, and follow the naming standard do as the commanded. 
#   
#  A folder named: 18-22 means start at 18 o clock, end at 22, everyday.
#  A folder named: 18-22-07 means start at 18 o clock, end at 22, only during Sunday.
#
#  01 = Monday, 02 = Tuesday and so on, thats why 07 is Sunday.
#
#  Files in subfolders will be playd according to the folders name.
#  
#  If for some reason there is an empty folder or it doesn't follow the standard above, we ignore it.
#
# # #
    cd $VIDEOPATH
    shopt -s nullglob
    FOLDERS=(*/)
    shopt -u nullglob # Turn off nullglob to make sure it doesn't interfere with anything later

    # Check if there is no subfolders
    if (( !${#FOLDERS[@]} )); then
        play_files "$VIDEOPATH" 
    else
        play_files "$VIDEOPATH"
        for entry in "${FOLDERS[@]}"; 
        do
            TEMPVAR=${entry::-1} # Remove trailing /
            IFS='-' read -a PLAYTIME <<< "$TEMPVAR" # PLAYTIME array [0] = Begin time, [1] = End time, [2] = Day
            if (( ${#PLAYTIME[@]} )); then
                #check if day is not set
                if (( !${#PLAYTIME[2]} )); then
                    check_if_time_to_play $TIME "${PLAYTIME[0]}" "${PLAYTIME[1]}" "$VIDEOPATH/$entry" 
                else # Day is set
                    if [ $DAY -eq "${PLAYTIME[2]}" ]; then
                        check_if_time_to_play $TIME "${PLAYTIME[0]}" "${PLAYTIME[1]}" "$VIDEOPATH/$entry"
                    else
                        continue # Not today..
                    fi
                fi
            fi
        done;
    fi

fi
done

মন্তব্যে যেমন বলা হয়েছে আমি ওএমএক্সপ্লেয়ারের দিকে চলেছি - তবে ভিএলসি পাশাপাশি কাজ করবে ভাল। এটি কেবল SERVICE = এবং play_files()ফাংশনে পরিবর্তন করুন।

সুতরাং স্ক্রিপ্টটি এতে অবস্থিত ফাইলগুলি খেলবে VIDEOPATHএবং যদি এই পাথটিতে সাব-ফোল্ডার থাকে তবে এটি ফোল্ডারগুলির জন্য এটি আবিষ্কার করা নামকরণ কনভেনশন ব্যবহার করে কিনা তা পরীক্ষা করে দেখাবে। স্ক্রিপ্টে মন্তব্যগুলি পড়ুন - মূলত আপনি স্টার্টটাইম-এন্ডটাইম (fx। একটি ফোল্ডারের নাম 22-23) নামে একটি ফোল্ডার তৈরি করতে পারেন এবং এই ফোল্ডারে ক্লিপগুলি কেবল 10PM থেকে 11PM এ খেলবে। এবং আপনি যদি সপ্তাহের নির্দিষ্ট দিনগুলিতে কেবল ক্লিপ খেলতে চান তবে এই ফোল্ডারে স্টার্টটাইম-এন্ডটাইম-ডে-অফউইক (Fx। নামক ফোল্ডার 22-23-01) ক্লিপগুলি কেবল সোমবার 10PM থেকে 11PM পর্যন্ত খেলবে। এটি 02 এ শেষ হয়েছে এটি মঙ্গলবার, 03 বুধবার এবং এ রকম হবে।

আমি মনে করি স্ক্রিপ্টের মন্তব্যে বাকীটি ব্যাখ্যা করা হয়েছে, অন্যথায় যদি আপনার কোন প্রশ্ন থাকে তবে নির্দ্বিধায় জিজ্ঞাসা করুন। এছাড়াও দয়া করে কোনও উন্নতি ভাগ করুন :)

আমার কাছে এই স্ক্রিপ্টটি বিভিন্ন স্থানে 50++++++ এর বেশি ভিন্ন ভিন্ন রাস্পবেরি পিআই-তে চলছে। তারা 24/7 এ রয়েছে এবং খুব স্থিতিশীল চলছে। আমি পিআই থেকে সমস্ত দৃশ্যমান জিইউআই সরিয়েছি। তারা সকলেই একটি ক্রোনজব চালায় যা প্রতি 15 মিনিটের মধ্যে একটি প্রধান সার্ভারের সাথে সিএসসি করে, আমার সিঙ্ক স্ক্রিপ্টটি এর মতো দেখাচ্ছে: sync.sh

#!/bin/sh

#MountFTP
echo "RASPERRYPIROOTPASSWORD" | sudo umount /home/pi/ftp/
sleep 5
echo "RASPERRYPIROOTPASSWORD" | sudo curlftpfs www-data:MYPASSWORD@MYSERVER.COM /home/pi/ftp -o allow_other

#Sync Videos
rsync -avztr --delete /home/pi/ftp/data/files/CURRENTRASPBERRYPI/ /home/pi/vids/

#sync scripts (so we can remotely update the scripts)
rsync -avztr /home/pi/ftp/data/files/Scripts/syncscript/CURRENTRASPBERRYPI/sync.sh /home/pi #is this script
rsync -avztr /home/pi/ftp/data/files/Scripts/play.sh /home/pi #is they play videos script
chmod +x *.sh

#Write to log
IP="$(curl -s http://whatismyip.akamai.com/)"
DATE="$(date +%d-%m-%Y-%X)"

echo $DATE " - " $IP " - CURRENTRASPBERRYPI " >> /home/pi/CURRENTRASPBERRYPI.txt
cp /home/pi/CURRENTRASPBERRYPI.txt /home/pi/ftp/logs/

উপরের স্ক্রিপ্টের মূল অক্ষরগুলি, আমি স্ক্রিপ্টটি চালিয়ে প্রতিটি কম্পিউটারের জন্য ম্যানুয়ালি পরিবর্তন করব।

সার্ভারে আমি এজেএক্স এক্সপ্লোরার নামে একটি ওয়েব-ভিত্তিক ফাইল-পরিচালক ব্যবহার করেছি, এখন পাইডিও বলে called এটি তাই ব্যবহারকারীরা সহজেই প্রতিটি কম্পিউটার / লোকেশন তাদের পছন্দসই ভিডিও আপলোড করতে পারবেন (/ ftp / ডেটা / ফাইল / CURRENTRASPBERRYPI /)।


আমি জানি এটি 5 বছর, তবে আপনি কি অত্যন্ত দয়াবান হন এবং আপনার উল্লিখিত চূড়ান্ত স্ক্রিপ্টটি প্রকাশ করবেন?
TheFrost

@Frost অবশ্যই আমাকে একটি সেকেন্ড দিন, আমি এই পোস্টটি আপডেট করব। আমি এমেক্স খেলোয়াড় স্যুইচ শেষ পর্যন্ত - কিন্তু আমি বিশ্বাস করি ভাল হিসাবে এটি ভিএলসি সঙ্গে সুন্দর কাজ করবে
Bolli

@ ফ্রিস্ট আমি আমার উত্তর আপডেট করেছি। এমন কিছু আছে যা বুঝায় না তা আমাকে জানান। এবং যদি আপনি এটি ব্যবহার করে শেষ করেন দয়া করে আপনার যে কোনও উন্নতি করতে পারেন তা ভাগ করুন :)
বলি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.