<开发笔记>HLS协议下多源同时切片

来源:互联网 发布:java程序注释 编辑:程序博客网 时间:2024/05/23 18:00

/************************************

允许转载,请注明文章来源和作者

Zhang Jianwei

BIT

921003zjw@163.com

************************************/

(目前在测试环节中基本上均采用脚本文件)

首先先对视频转码的命令进行修正:

之前的一些命令会使得转好的ts源在切片时,使得切片程序报错,经过测试,可以采用以下命令来解决报错问题。

ffmpeg -i <input file> -f mpegts -b:v <rate> -bsf:v h264_mp4toannexb <output file>

经过前面的过程,现在基础环境已经搭建完成,可以进行下一步的工作:多视频源同时切片与直播。

由于项目要求直播要能够自适应不同网速的网络环境,所以提供了多个不同码率的视频源,并且:1、采用ts格式:意味着不需要转码;2、使用udp协议。

基于以上要求,给出下面脚本代码:

#!/bin/bashIP=`/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "地址:"`./segmenter -i udp://localhost:12345 -d 5 -p livesrc/live_ -n 10  -m live.m3u8 -u http://$IP/ &./segmenter -i udp://localhost:23456 -d 5 -p livesrc/live1_ -n 10  -m live1.m3u8 -u http://$IP/ &
其中第二行“IP=……”是用来获取本机IP地址的。

第三第四行代码就是多源同时切片的命令。

-i后面跟的是输入的视频源,在测试中我用VLC进行流的发布,采用udp协议,-d后面是切片的时间,-p后面是<dir/prefix>,-n则是保留切片的个数(直播使用,只保留10个切片,同样会自动更新m3u8文件),-u后面则是网络路径(*说明*切片后在m3u8文件里完整的播放路径是这样的:[-u后面的内容]+[-p后面的内容]。在本例中是:http://$IP/livesrc/live_XXX.ts)。

在命令的最后的&则是用来将这一命令开启的segmenter程序放到后台运行,这个就是针对多源进行切片的方法。如果在前台进行运行,那么同时只能对一个源进行切片,而使用&则可以将程序挪到后台运行,这样可以同时针对多个源进行切片。

以上方法经过测试可行。(测试环境:server--ubuntu+apache2,client--Macbook Air)


0 0