আমি প্রথমে একটি ভিএলসি এলইউ এক্সটেনশন লেখার সম্ভাবনাগুলি দেখেছি এবং এটি খুব সম্ভব 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 /)।