流媒体技术世界——分享技术,增值服务
从外部视频源拉流进入Flussonic Media Server

首先介绍一下什么是拉流?拉流,我们知道是流媒体服务器主动发起的,从一个视频源将视频“拉进”流媒体服务器(比如Flussonic Media Server或Wowza Streaming Engine)。

注:有时候,我们也把用户播放器端播放来自流媒体的视频流时也称之为拉流,因为那是从播放器主动发起的,从流媒体服务器上拉流到用户播放终端。本文说的“拉流”不包括这个意思。

接着,我们需要了解一个概念“持续拉流”和“按需拉流”:

顾名思义,“持续拉流”的意思就是,不管有没有用户观看视频的需求,流媒体服务器都一直不间断地从视频源“拉流”。在Flussonic Media Server中,这个“持续拉流”的英文是“static stream”。如果你在它的管理界面或文档上看到这个词,你应该明白它是指“持续拉流”。

“按需拉流”的意思就是只有当有用户观看时,流媒体服务器才会从视频源拉流,当没有用户观看了,它就不再从视频源拉流了。当然这一切都是一个自动的过程,无需人员干预。在Flussonic Media Server中,这个“按需拉流”的英文是“ondemand stream”。如果你在它的管理界面或文档上看到这个词,你应该明白它是指“按需拉流”。

好了,第一步,我们来看一下如何配置一个从视频源持续拉流:

1、通过Http协议,从外部服务器拉取http ts流-------持续拉流:(注意,它不是HLS切片流)


stream myStream tshttp://10.0.4.5:9000/channel/5;
	

其中stream是建立直播流的指令,myStream是给这个直播流起个名字,后面的tshttp://开头的url表示这是一个http ts协议输出的视频源。

以此类推:

2、从rtsp视频源拉流-------持续拉流:


stream myStream rtsp://10.0.4.5:554/Streaming/Channels/201?transportmode=unicast;
	
有时候,rtsp出来的流即有音频,也有视频,但假设,我们只需要视频流,不需要音频流 (比如摄像头监控)。我们可以用 tracks 指令指定其中的一个轨道(track),如下:
stream cam1 {
url rtsp://10.0.4.3:554/h264;
tracks 1;
}
	
另外,有些场景我们也需要音频,但是摄像头出来的音频流编码格式一般都是G.711或G.711u,我们可以用下面 rtsp2 指令,自动将其转码为AAC(前提是要安装flussonic-ffmpeg扩展包),如下:
stream cam1 {
url rtsp2://10.0.4.3:554/h264;
}
    

3、从rtmp视频源拉流-------持续拉流:


stream myStream rtmp://10.0.4.5:1935/live/myStream;
	

4、从HLS视频源拉流-------持续拉流:


stream myStream hls://10.0.4.5:8080/stream/index.m3u8;
	

5、从UDP端口拉流(MPEG-TS Over UDP):-------持续拉流


stream myStream udp://239.0.0.1:5001;
或
stream myStream udp://239.0.0.1:5000/192.168.0.15;  //指定192.168.0.15的意思是指从指定的网卡接收组播流。
	
注意:在这种方式下,Flussonic Media Server即支持从组播地址接收流,也支持从单播地址接收流。由于这个方式只是监听本地UDP端口接收数据流,因此编码器侧主动先向这个地址/端口发送数据包,也就是MPEG-TS数据包。

从UDP端口接收TS流时,如果一个TS流包含多套节目(MPTS),你可以用 program 参数来指定具体的某一套节目,还有其它一些可选的配置参数,如下:
stream 1 {
url udp://239.0.0.1:1234 program=2001;
}
stream 2 {
url udp://239.0.0.1:1234 program=2002;
}
stream 3 {
url udp://239.0.0.1:1234 program=2003;
}
	
考虑到源流有可能会出现临时中断的问题,我们可以为一个直播流配置多个源流url,做冗余处理,还可以为每一个url设置优先级和timeout时间,如下:
stream ort {
url tshttp://10.0.4.5:9000/channel/5;
url tshttp://10.2.4.5:9000/channel/5;
}	
或
stream rtr {
url tshttp://10.0.4.5:9000/channel/5 priority=1 source_timeout=60;
url tshttp://10.2.4.5:9000/channel/5 priority=2 source_timeout=60;
}

	
如果没有设置优先级,默认的优先级是从第一个开始到最后一个越来越低。假设,第一个源流中断了,Flussonic切换到第二个流,但并不是此后就一直采用这第二个流,而是还会继续周期性检查第一个流,如果第一个流恢复了,就自动切换回第一个流了。

好了,记住,上面的直播流指令stream代表都是“持续拉流”,也就是“static stream”。

如果是“按需拉流”,你只要把直播流指令stream改为ondemand即可,注意这些都是小写的,不要大写。如下所示:


1、通过Http协议,从外部服务器拉取http ts流:-------按需拉流(注意,它不是HLS切片流)


ondemand myStream tshttp://10.0.4.5:9000/channel/5;
	

2、从rtsp视频源拉流:-------按需拉流


ondemand myStream rtsp://10.0.4.5:554/Streaming/Channels/201?transportmode=unicast;
	

3、从rtmp视频源拉流:-------按需拉流


ondemand myStream rtmp://10.0.4.5:1935/live/myStream;
	

4、从HLS视频源拉流:-------按需拉流


ondemand myStream hls://10.0.4.5:8080/stream/index.m3u8;
	

5、从UDP端口拉流(MPEG-TS Over UDP):-------按需拉流


ondemand myStream udp://239.0.0.1:5001;
或
ondemand myStream udp://239.0.0.1:5000/192.168.0.15;  //指定192.168.0.15的意思是指从指定的网卡接收组播流。
	
注意:

1、在这种方式下,Flussonic Media Server即支持从组播地址接收流,也支持从单播地址接收流。由于这个方式只是监听本地UDP端口接收数据流,因此编码器侧主动先向这个地址/端口发送数据包,也就是MPEG-TS数据包。

2、在这种方式下,按需拉流只是是否要从UDP端口接收数据包,并不会节约带宽,因为数据包是由编码器主动推送到Flussonic Media Server的UDP端口上的。

直播流名字的有效字符范围


一个直播流名字的有效字符范围为: a-z A-Z 0-9 . - _
匿名用户
评论

我们的地址


北京市朝阳区管庄西里建基商务楼423室


邮编:100024

关于我们


北京锑流科技有限责任公司


官网:www.ttstream.com

联系我们


王经理:13381282581

京ICP备14033868号-2