/************************************
允許轉載,請註明文章來源和作者
Zhang Jianwei
BIT
************************************/
(目前在測試環節中基本上均採用腳本文件)
首先先對視頻轉碼的命令進行修正:
之前的一些命令會使得轉好的ts源在切片時,使得切片程序報錯,經過測試,可以採用以下命令來解決報錯問題。
ffmpeg -i <input file> -f mpegts -b:v <rate> -bsf:v h264_mp4toannexb <output file>
經過前面的過程,現在基礎環境已經搭建完成,可以進行下一步的工作:多視頻源同時切片與直播。
由於項目要求直播要能夠自適應不同網速的網絡環境,所以提供了多個不同碼率的視頻源,並且:1、採用ts格式:意味着不需要轉碼;2、使用udp協議。
基於以上要求,給出下面腳本代碼:
#!/bin/bash
IP=`/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "地址:"`
./segmenter -i udp://localhost:12345 -d 5 -p livesrc/live_ -n 10 -m live.m3u8 -u http://$IP/ &
./segmenter -i udp://localhost:23456 -d 5 -p livesrc/live1_ -n 10 -m live1.m3u8 -u http://$IP/ &
其中第二行“IP=……”是用來獲取本機IP地址的。
第三第四行代碼就是多源同時切片的命令。
-i後面跟的是輸入的視頻源,在測試中我用VLC進行流的發佈,採用udp協議,-d後面是切片的時間,-p後面是<dir/prefix>,-n則是保留切片的個數(直播使用,只保留10個切片,同樣會自動更新m3u8文件),-u後面則是網絡路徑(*說明*切片後在m3u8文件裏完整的播放路徑是這樣的:[-u後面的內容]+[-p後面的內容]。在本例中是:http://$IP/livesrc/live_XXX.ts)。
在命令的最後的&則是用來將這一命令開啓的segmenter程序放到後臺運行,這個就是針對多源進行切片的方法。如果在前臺進行運行,那麼同時只能對一個源進行切片,而使用&則可以將程序挪到後臺運行,這樣可以同時針對多個源進行切片。
以上方法經過測試可行。(測試環境:server--ubuntu+apache2,client--Macbook Air)