IT之家學院:使用樹莓派搭建B站直播點歌台
寫在前面:
昨天我寫了篇教程(IT之家學院:利用樹莓派在B站24小時直播音樂),評論里有很多人都想要點歌功能。
點歌這個功能吧,其實想加也不算太難,可是啊…這是樹莓派啊!直播姬彈幕姬實時渲染什麼的帶不動的啊!(好像也裝不上)
可是啊…點歌這個功能好像也是很有必要的呢……
所以呢…我今天花了一個上午+一個中午的時間自己做了一個能在樹莓派上運行的點歌台,雖然很簡陋,但是能實現這個功能就已經很不錯了嘛
(不會php和python的我靠著搜索引擎用php和python實現了這個功能…不是計算機專業的我已經儘力了……)
最終效果:http://live.bilibili.com/16703
本文著重於講解如何搭建,不會涉及代碼的詳細解釋。
下面開始教程
第一步:
請先按照之前的教程裝上該裝的東西(IT之家學院:利用樹莓派在B站24小時直播音樂)
第二步:安裝python的庫
我們的python腳本需要一些必不可少的庫,依次運行下面兩個命令進行安裝:
sudo pip install eyed3
sudo pip install pathlib
第三步:安裝nginx+php環境
這一步是為了能運行點歌的網頁
安裝nginx:
sudo apt-get install nginx
啟動 nginx:
sudo /etc/init.d/nginx start
接下來修改配置文件:
sudo nano /etc/nginx/sites-available/default
在 「listen 80」 那個大括弧里,把 「index index.html index.htm」 後面加上 「index.php」,像下面這樣:
listen 80;
root /usr/share/nginx/www;
index index.html index.htm index.php;
然後再找到 php 那一段,改成下面這樣:
location ~ .php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
改完配置文件之後,保存關閉(ctrl+o回車,ctrl+x)。
安裝 php 和必要組件:
sudo apt-get install php5-fpm php5-sqlite
重啟 nginx:
sudo /etc/init.d/nginx reload
如果你不嫌煩的話,可以再把所有php組件裝上,我也不知道後面的代碼需不需要這些東西,因為我全都裝上了??
sudo apt-get install php5-mysql php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl
第四步:內網穿透(有公網IP的各位可以跳過,你們直連ip就行了)
網站搭建好了,我們要實現別人可以訪問,可是呢,我這裡是學校的區域網(哭),所以需要內網穿透。
這裡我是用的是ngrok,水家之前有人發過nat123的,感興趣的可以去找找。
其實用法很簡單(如果你不想自己搭建伺服器的話)。
用 ngrok.cc 提供的服務舉例:
首先到後台開通一個隧道,隧道協議選擇 「http」、本地埠寫你前面設置的埠(前面配置文件里寫的是 80)「127.0.0.1:80」 其他的按照自己的需求來寫就行,
然後下載官網提供的軟體,樹莓的話要選linux arm版,
下載之後先給 777 許可權:
sudo chmod 777 xxxx#文件名
然後按教程運行就行了:
./sunny clientid xxxxxxxxxxxxxx
如果前面沒有做錯什麼的話,你的網站應該就能從ngrok.cc里獲取的鏈接里訪問了。
第五步:點歌系統所需的php文件
這裡php所需要實現的功能就是:
1.可以自動搜索歌曲;
2.可以獲取到歌曲的下載鏈接;
我網上找到一個遠古的網易雲api,所以我就拿來用了。
php代碼在水家文章里發可能被轉碼,所以我發到了這裡:glist。
php文件放置請放到/usr/share/nginx/www/這一級文件夾的下面任意位置(你要保證別人能訪問),
為了能讓腳本正常運行,建議在賦予其讀寫文件夾的許可權:
sudo chmod -R 777 /usr/share/nginx/www/
注意事項:本人的php水平不高,畢竟沒有系統性學過,這個文件是靠著必應來的代碼拼湊+模仿寫成的,可能會有漏洞(應該問題不大)。
第六步:使用python腳本實現下載歌曲、調用ffmpeg渲染視頻的功能
python腳本如下,請注意縮進和準備好遊標卡尺(筆者將php文件放到了/usr/share/nginx/www/songs/文件夾):
import os
import urllib
import eyed3
import time
while True:
for i in range(1, 30+1):
if(os.path.exists("/usr/share/nginx/www/songs/"+str(i)+".txt")): #判斷待渲染文件是否存在
f = open("/usr/share/nginx/www/songs/"+str(i)+".txt")
content = f.read #讀取文件
print("downloading "+str(i)+".mp3") #debug
urllib.urlretrieve(content, str(i)+".mp3") #下載mp3文件
print("download success") #debug
xx=eyed3.load(str(i)+".mp3")
seconds=xx.info.time_secs #獲取音樂時長,為渲染一圖流視頻做準備
os.system("ffmpeg -loop 1 -r 1 -t "+str(seconds)+" -f image2 -i "+str(i)+".png -vcodec libx264 -pix_fmt yuv420p -crf 24 -y SinglePictureVideo.mp4") #渲染一圖流視頻,參數都是我做完試出來的,尤其是-pix_fmt yuv420p這個參數,缺了它視頻就是黑屏了
os.system("ffmpeg -i SinglePictureVideo.mp4 -i "+str(i)+".mp3 -c:v copy -c:a aac -y "+str(i)+".flv") #合并視頻與音頻
os.remove(str(i)+".mp3") #刪掉臨時文件
os.remove("SinglePictureVideo.mp4")
os.remove("/usr/share/nginx/www/songs/"+str(i)+".txt")
print(str(i)+"output finished")
time.sleep(10)
注意事項:本人的python水平也不高,所以……(逃
第六步:做好視頻封面
請在py腳本的同級目錄新建三十個png圖片,文件名也要1-30,看我多麼有誠意的手繪(真難看):
第七步:修改ffmpeg運行腳本
因為我們是運行多個文件,所以我們需要連續推流,這時ffmpeg網站的幫助文檔就起作用了(我找了半天沒找到發現官網就有…
官網說明:https://trac.ffmpeg.org/wiki/Concatenate
下面直接說做法了,首先新建一個txt,內容類似為:
file "/home/pi/songs/1.flv"
file "/home/pi/songs/2.flv"
file "/home/pi/songs/3.flv"
file "/home/pi/songs/4.flv"
file "/home/pi/songs/5.flv"
file "/home/pi/songs/6.flv"
file "/home/pi/songs/7.flv"
file "/home/pi/songs/8.flv"
file "/home/pi/songs/9.flv"
file "/home/pi/songs/10.flv"
file "/home/pi/songs/11.flv"
file "/home/pi/songs/12.flv"
file "/home/pi/songs/13.flv"
file "/home/pi/songs/14.flv"
file "/home/pi/songs/15.flv"
file "/home/pi/songs/16.flv"
file "/home/pi/songs/17.flv"
file "/home/pi/songs/18.flv"
file "/home/pi/songs/19.flv"
file "/home/pi/songs/20.flv"
file "/home/pi/songs/21.flv"
file "/home/pi/songs/22.flv"
file "/home/pi/songs/23.flv"
file "/home/pi/songs/24.flv"
file "/home/pi/songs/25.flv"
file "/home/pi/songs/26.flv"
file "/home/pi/songs/27.flv"
file "/home/pi/songs/28.flv"
file "/home/pi/songs/29.flv"
file "/home/pi/songs/30.flv"
然後多複製粘貼十幾遍保存,免得放完又重啟,
啟動的sh腳本也不能用昨天的了,要改成下面的樣子:
#!/bin/bash
while true
do
ffmpeg -re -f concat -safe 0 -i playlist.txt -vcodec copy -acodec aac -b:a 192k -f flv "你的。。。那啥網址和碼"
done
注意本sh腳本要與playlist.txt在同級目錄(廢話)…
這樣ffmpeg就會連續按txt里的順序進行推流。
第八步:把初始視頻文件生成好
這一步非常簡單,就是把1-30.flv全部生成完就行,
我這裡全部選擇了「種太陽」,我對不起直播間的那位小夥伴(Sortana)的耳朵??
第九步:啟動。。
啟動就行了。。
screen nohup sh live.sh &
screen nohup python live.py &
教程完畢。
由於內容比較多,可能有遺漏的部分,請諒解。
想看到更多這類內容?去APP商店搜IT之家,天天都有小歡喜。


※IT之家學院:將Win10任務欄改造為媒體控制欄
※Win10 Mobile不死?IT之家網友發掘Win10 Build 16212內部信息
※魅族Pro 7/Plus手機專利圖渲染:背面是個老式MP3
※新浪微博系統升級:一大波假冒海外代購黨要被曝光
TAG:IT之家 |
※IT之家學院:在樹莓派上搭建私有雲存儲
※樹莓派搭建WiFi釣魚系統
※ISRO成功發射新衛星 地區GPS系統搭建完成
※在IIS里搭建FTP伺服器
※NVIDIA英偉達免費直播課:帶你選擇、搭建AI伺服器!
※菜鳥跟你一起學用樹莓派搭建NAS
※NVIDIA英偉達:深度學習伺服器搭建指南
※用音樂搭建維繫《UC》與《NT》的橋樑
※用KPPW搭建一個BIM眾包網,打造BIM技術眾包領域的王牌!
※LAMP環境搭建
※中國基建NO.1中國玩家在《ATLAS》搭建城堡老外看了都服
※用KPPW搭建一個威客網站,成就青年創業的新渠道!
※在雲伺服器上搭建FTP
※搭建大眾點評 CAT 監控平台
※中國基建果然NO.1 中國玩家在《ATLAS》里搭建城堡老外看了都服
※車和家股東利歐股份重組公告:車和家擬搭建VIE架構,為海外上市做準備
※中國基建果然NO.1 中國玩家在《ATLAS》里搭建城堡老外看了都服!
※基於阿里雲HiTSDB搭建工業物聯網平台實踐
※ASP .NET入門及其環境搭建
※從零學習Spring MVC框架「環境搭建和MVC架構」