Linux下生成HLS所需的.ts和.m3u8文件

要想利用HLS來實現視頻的在線播放,就得須要將一個完整的視頻文件切割成多個ts視頻流,而後利用m3u8的索引文件來播放。Mac下蘋果提供了streamingTools,裏面有mediafilesegmentermediastreamsegmenter來分別實現文件和直播流的切割,一行命令直接就能夠將輸入的原始視頻文件導出成幾個ts和索引文件,直接就能夠用了。可是通常服務器都是基於linux的,要想在linux下實現一樣的切割,須要藉助一些工具,基本是利用開源的ffmpegsegmenter工具來實現。php

安裝ffmpeghtml

$ apt-get install ffmpeg
$ apt-get install libavformat-dev

得到m3u8-segmenterlinux

$ git clone https://github.com/johnf/m3u8-segmenter 
$ aclocal
$ automake -ac
$ ./configure
$ make
$ sudo make install  

編譯其中的文件m3u8-segmentergit

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

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

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

其中in file爲待轉換的視頻文件,好比input.movoutput file爲轉換後的文件,要命名爲output.tsweb

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

$ ./segmenter -i out.ts -n 10 -p segmenter_test -m test.m3u8 -u http://192.168.1.100:8080/hls/

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

切片以後,最後一段ts無論是否是10s,一樣會按10s去切,致使切好後的視頻最後一段會加上去幾秒的黑段來補足10s,緣由是segmenter.c中的程序寫的還有缺陷,修正方法以下:https://github.com/johnf/m3u8...iphone

參考:工具

http://blog.chinaunix.net/uid...
http://shappy1978.iteye.com/b...
http://www.ioncannon.net/prog...
http://blog.cnrainbird.com/in...

相關文章
相關標籤/搜索