設(shè)置
  • 日夜間
    隨系統(tǒng)
    淺色
    深色
  • 主題色

IT之家學(xué)院:使用樹莓派搭建B站直播點(diǎn)歌臺(tái)

2017/6/3 17:07:14 來源:IT之家 作者:晨旭喵 責(zé)編:文軒
感謝IT之家網(wǎng)友 軟媒用戶1444076 的線索投遞!

感謝IT之家網(wǎng)友 晨旭喵 的投稿

寫在前面:

昨天我寫了篇教程(IT之家學(xué)院:利用樹莓派在B站24小時(shí)直播音樂),評論里有很多人都想要點(diǎn)歌功能。

點(diǎn)歌這個(gè)功能吧,其實(shí)想加也不算太難,可是啊…這是樹莓派??!直播姬彈幕姬實(shí)時(shí)渲染什么的帶不動(dòng)的啊?。ê孟褚惭b不上)

可是啊…點(diǎn)歌這個(gè)功能好像也是很有必要的呢……

所以呢…我今天花了一個(gè)上午+一個(gè)中午的時(shí)間自己做了一個(gè)能在樹莓派上運(yùn)行的點(diǎn)歌臺(tái),雖然很簡陋,但是能實(shí)現(xiàn)這個(gè)功能就已經(jīng)很不錯(cuò)了嘛

(不會(huì)php和python的我靠著搜索引擎用php和python實(shí)現(xiàn)了這個(gè)功能…不是計(jì)算機(jī)專業(yè)的我已經(jīng)盡力了……)

最終效果:http://live.bilibili.com/16703

本文著重于講解如何搭建,不會(huì)涉及代碼的詳細(xì)解釋。

下面開始教程

第一步:

請先按照之前的教程裝上該裝的東西(IT之家學(xué)院:利用樹莓派在B站24小時(shí)直播音樂

第二步:安裝python的庫

我們的python腳本需要一些必不可少的庫,依次運(yùn)行下面兩個(gè)命令進(jìn)行安裝:

sudo pip install eyed3

sudo pip install pathlib

第三步:安裝nginx+php環(huán)境

這一步是為了能運(yùn)行點(diǎn)歌的網(wǎng)頁

安裝nginx:

sudo apt-get install nginx

啟動(dòng) nginx:

sudo /etc/init.d/nginx start

接下來修改配置文件:

sudo nano /etc/nginx/sites-available/default

在 “l(fā)isten 80” 那個(gè)大括號(hào)里,把 “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;

}

改完配置文件之后,保存關(guān)閉(ctrl+o回車,ctrl+x)。

安裝 php 和必要組件:

sudo apt-get install php5-fpm php5-sqlite

重啟 nginx:

sudo /etc/init.d/nginx reload

如果你不嫌煩的話,可以再把所有php組件裝上,我也不知道后面的代碼需不需要這些東西,因?yàn)槲胰佳b上了??

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

第四步:內(nèi)網(wǎng)穿透(有公網(wǎng)IP的各位可以跳過,你們直連ip就行了)

網(wǎng)站搭建好了,我們要實(shí)現(xiàn)別人可以訪問,可是呢,我這里是學(xué)校的局域網(wǎng)(哭),所以需要內(nèi)網(wǎng)穿透。

這里我是用的是ngrok,水家之前有人發(fā)過nat123的,感興趣的可以去找找。

其實(shí)用法很簡單(如果你不想自己搭建服務(wù)器的話)。

用 ngrok.cc 提供的服務(wù)舉例:

首先到后臺(tái)開通一個(gè)隧道,隧道協(xié)議選擇 “http”、本地端口寫你前面設(shè)置的端口(前面配置文件里寫的是 80)“127.0.0.1:80” 其他的按照自己的需求來寫就行,

然后下載官網(wǎng)提供的軟件,樹莓的話要選linux arm版,

下載之后先給 777 權(quán)限:

sudo chmod 777 xxxx#文件名

然后按教程運(yùn)行就行了:

./sunny clientid xxxxxxxxxxxxxx

如果前面沒有做錯(cuò)什么的話,你的網(wǎng)站應(yīng)該就能從ngrok.cc里獲取的鏈接里訪問了。

第五步:點(diǎn)歌系統(tǒng)所需的php文件

這里php所需要實(shí)現(xiàn)的功能就是:

1.可以自動(dòng)搜索歌曲;

2.可以獲取到歌曲的下載鏈接;

我網(wǎng)上找到一個(gè)遠(yuǎn)古的網(wǎng)易云api,所以我就拿來用了。

php代碼在水家文章里發(fā)可能被轉(zhuǎn)碼,所以我發(fā)到了這里:glist。

php文件放置請放到/usr/share/nginx/www/這一級文件夾的下面任意位置(你要保證別人能訪問),

為了能讓腳本正常運(yùn)行,建議在賦予其讀寫文件夾的權(quán)限:

sudo chmod -R 777 /usr/share/nginx/www/

注意事項(xiàng):本人的php水平不高,畢竟沒有系統(tǒng)性學(xué)過,這個(gè)文件是靠著必應(yīng)來的代碼拼湊+模仿寫成的,可能會(huì)有漏洞(應(yīng)該問題不大)。

第六步:使用python腳本實(shí)現(xiàn)下載歌曲、調(diào)用ffmpeg渲染視頻的功能

python腳本如下,請注意縮進(jìn)和準(zhǔn)備好游標(biāo)卡尺(筆者將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   #獲取音樂時(shí)長,為渲染一圖流視頻做準(zhǔn)備

      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')     #渲染一圖流視頻,參數(shù)都是我做完試出來的,尤其是-pix_fmt yuv420p這個(gè)參數(shù),缺了它視頻就是黑屏了

      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')    #刪掉臨時(shí)文件

      os.remove('SinglePictureVideo.mp4')

      os.remove('/usr/share/nginx/www/songs/'+str(i)+'.txt')

      print(str(i)+'output finished')

  time.sleep(10)

注意事項(xiàng):本人的python水平也不高,所以……(逃

第六步:做好視頻封面

請?jiān)趐y腳本的同級目錄新建三十個(gè)png圖片,文件名也要1-30,看我多么有誠意的手繪(真難看):

第七步:修改ffmpeg運(yùn)行腳本

因?yàn)槲覀兪沁\(yùn)行多個(gè)文件,所以我們需要連續(xù)推流,這時(shí)ffmpeg網(wǎng)站的幫助文檔就起作用了(我找了半天沒找到發(fā)現(xiàn)官網(wǎng)就有…

官網(wǎng)說明:https://trac.ffmpeg.org/wiki/Concatenate

下面直接說做法了,首先新建一個(gè)txt,內(nèi)容類似為:

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'

然后多復(fù)制粘貼十幾遍保存,免得放完又重啟,

啟動(dòng)的sh腳本也不能用昨天的了,要改成下面的樣子:

#!/bin/bash

while true

do

  ffmpeg -re -f concat -safe 0 -i playlist.txt -vcodec copy -acodec aac -b:a 192k -f flv "你的。。。那啥網(wǎng)址和碼"

done

注意本sh腳本要與playlist.txt在同級目錄(廢話)…

這樣ffmpeg就會(huì)連續(xù)按txt里的順序進(jìn)行推流。

第八步:把初始視頻文件生成好

這一步非常簡單,就是把1-30.flv全部生成完就行,

我這里全部選擇了“種太陽”,我對不起直播間的那位小伙伴(Sortana)的耳朵??

第九步:啟動(dòng)。。

啟動(dòng)就行了。。

screen nohup sh live.sh &

screen nohup python live.py &

教程完畢。

由于內(nèi)容比較多,可能有遺漏的部分,請諒解。

廣告聲明:文內(nèi)含有的對外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時(shí)間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。

相關(guān)文章

關(guān)鍵詞:樹莓派,B站點(diǎn)歌,B站直播

軟媒旗下網(wǎng)站: IT之家 最會(huì)買 - 返利返現(xiàn)優(yōu)惠券 iPhone之家 Win7之家 Win10之家 Win11之家

軟媒旗下軟件: 軟媒手機(jī)APP應(yīng)用 魔方 最會(huì)買 要知