linux下搭建生成HLS所需的.ts和.m3u8文件


要想利用HLS來實現視頻的在線播放,就得需要將一個完整的視頻文件切割成多個ts視頻流,然后利用m3u8的索引文件來播放。

在Mac下,蘋果提供了streamingTools的工具,里面有mediafilesegmenter和mediastreamsegmenter來分別實現文件和直播流的切割,一行命令直接就可以將輸入的原始視頻文件導出成幾個ts和索引文件,直接就可以用了。但是一般服務器都是基於linux的,要想在linux下實現同樣的切割,着實費了一番功夫。

網上也找了好多相關的資料,基本是利用開源的ffmpeg和segmenter工具來實現,但是這搭建這個環境的過程是曲折的,編譯這些工具的時候會出現好多錯誤,難以解決,好多文章的步驟介紹的也很復雜,又要安裝各種包,又要修改源代碼,經過幾天的各種反復嘗試,才知道在不是直接將源文件切割,而是先要轉換一下,再切割,最終終於痛苦的摸索到了一個成功的路子,特此記錄下來以防忘記。

1、首先獲得ffmpeg

  apt-get install ffmpeg

2、安裝ffmpeg支持庫,為m3u8-segmenter准備

  apt-get install libavformat-dev

3、獲得m3u8-segmenter

  https://github.com/johnf/m3u8-segmenter 

4、編譯並安裝m3u8-segmenter

  aclocal

  automake -ac

  ./configure

  make

  sudo make install  

4、編譯其中的文件m3u8-segmenter

  gcc -Wall -g  m3u8-segmenter.c -o segmenter -lavformat 

5、利用ffmpeg將已有的視頻文件轉換成ts文件

  ffmpeg -y -i <in file> -vcodec copy -acodec copy -vbsf h264_mp4toannexb <output file>

其中in file為待轉換的視頻文件,比如input.mov,output file為轉換后的文件,要命名為output.ts

6、利用segmenter將轉換好的ts文件切割成多個ts片,並生成.m3u8的索引文件

  ./segmenter -i out.ts -n 10 -p segmenter_test -m test.m3u8 -u 

i表示輸入文件,n表示切割10秒,p表示切割文件的前綴。m表示生成的m3u8文件名,u表示這些切割后的文件處於web server的哪個目錄下

PS:實踐過程中發現一個問題,就是切片之后,最后一段ts不管是不是10s,同樣會按10s去切,導致切好后的視頻最后一段會加上去幾秒的黑段來補足10s,原因是segmenter.c中的程序寫的還有缺陷,修正方法如下:

https://github.com/johnf/m3u8-segmenter/pull/10/files

參考:

http://blog.chinaunix.net/uid-25530360-id-3483535.html

http://shappy1978.iteye.com/blog/1071815

http://www.ioncannon.net/programming/452/iphone-http-streaming-with-ffmpeg-and-an-open-source-segmenter/

http://hi.baidu.com/lphack/item/83865611c5f82c8988a956df

http://blog.cnrainbird.com/index.php/2012/03/25/ping_guo_http_shi_pin_dian_bo_ji_shu/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM