要想利用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...