linux下搭建生成HLS所需的.ts和.m3u8文件
2015-06-11 19:16
387 查看
要想利用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
/article/4001837.html
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/
在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
/article/4001837.html
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/
相关文章推荐
- linux软件卸载
- Linux内存 性能调优
- 浅谈linux vsftp虚拟用户配置与工作模式分析
- 我的Linux学习历程:那些我看过的Linux书籍们
- Centos6.5 搭建mysq主从复
- linux下拆分文件split
- yum和apt-get的区别
- Linux下的Nano命令
- 【待续】Centos7安装完后无法进入图形界面(GNOME/KDE)的解决方
- Linux如何查看CPU温度
- easy_install jinja2 mac linux
- 走进Linux01-磁盘分区与目录结构
- 使用mutt发送邮件
- Linux 一些命令记录
- 在Linux下用 eric4+python+pyqt 编写一个多窗口程序
- linux 安装 apr
- smartsvn 8.6.6 for linux 的安装与破解
- Linux GCC升级4.8.2 支持C++11 (CentOS)
- Linux命令详解之一文件操作
- Linux初步——常用简单命令