要想利用HLS
來實現視頻的在線播放,就得須要將一個完整的視頻文件切割成多個ts
視頻流,而後利用m3u8
的索引文件來播放。Mac
下蘋果提供了streamingTools
,裏面有mediafilesegmenter
和mediastreamsegmenter
來分別實現文件和直播流的切割,一行命令直接就能夠將輸入的原始視頻文件導出成幾個ts
和索引文件,直接就能夠用了。可是通常服務器都是基於linux
的,要想在linux
下實現一樣的切割,須要藉助一些工具,基本是利用開源的ffmpeg
和segmenter
工具來實現。php
安裝ffmpeg
html
$ apt-get install ffmpeg $ apt-get install libavformat-dev
得到m3u8-segmenter
linux
$ git clone https://github.com/johnf/m3u8-segmenter $ aclocal $ automake -ac $ ./configure $ make $ sudo make install
編譯其中的文件m3u8-segmenter
git
$ 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.mov
,output file
爲轉換後的文件,要命名爲output.ts
web
利用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...