微软流媒体服务器直播,流媒体服务器Flussonic Media Server对直播流进行录制

Flussonic Media Server可以对直播流进行录制,然后在提供播放服务。

我们首先来看如何为直播流配置录制功能,如下:

stream channel0 {

url tshttp://vlc:9090/;

dvr /storage;

}

stream channel2 {

url tshttp://vlc:9090/;

dvr @globalstorage;

}

stream channel3 {

url tshttp://vlc:9090/;

dvr swift://user=office:max&password=secretpass&@prod1.local:8080/movies;

}

dvr globalstorage /storage;

在上面的例子中,我们为直播流添加了dvr指令,在这个指令后有一个存储路径,也就是录制文件在什么位置存储。你可以在配置文件的用dvr指令定义一个全局配置(并不在某一个直播流的配置中),然后在每一个流中引用这个配置。最后,关于这个存储路径,你也可以指定网络存储的位置,例如AWS S3和Openstack Swift。

接下来,我们来学习一下关于录制的其它参数,举例如下:

1、2d:2d表示保留最近2天的,也可以用8h表示保留最近8小时的。

2、90%:你可以指定磁盘占用的上限为90%。

3、10G:你可以指定录制文件的最大容量为10Gbytes。

4、schedule=8:00-16:00: 你可以指定一个或多个时间段,只有在这个时间段内才录制。时间段可以精确的小时,也可以精确到分钟,也可以跨越午夜。多个时间段可以用逗号隔开。例如8:00-16:00,22-1:30

使用这几个参数的示例如下:

stream channel0 {

url tshttp://vlc:9090/;

dvr /storage 2d 90% 10G schedule=8:00-16:00;

}

注意:如果你不是要在服务器启动时自动开始录制,而是通过API来启动录制,比如从外部发起一个Http请求之后再开始按照上面的配置启动录制。这时你可以将dvr指令换成dvr_offline,其它没有任何变化

我们接下来,继续学习如何播放这些已经录制为文件的流,如下:

使用HLS播放,请使用下面的URL:

播放已经录制完成的文件:

http://flussonic:8080/ort/index-1409148900-3600.m3u8

其中1409148900代表北京时间2014年8月27日 22:15:00。 3600表示1个小时,也就是播放从这个时间开始的1个小时的视频。

如果不是要播放已经录制完成的文件,而是要播放直播流,也不确定要观看这个直播多久(因为不知道直播什么时候结束),那么你可以用now来表示现在最新的内容。这种场景比较适合观看哪些还没有结束的直播节目,但是又错过了开始时间,要从已经过去的某个时间点播放,你可以用下面的url:

http://flussonic:8080/ort/index-1409148900-now.m3u8

http://flussonic:8080/channel/archive/1409148900/now/index.m3u8

你也可以使用下面的播放url, timeshift_abs表示这是时移直播,并且采用绝对时间:

http://flussonic:8080/channel/timeshift_abs-11409148900.m3u8

对于在多语言(多个音频轨道)场景下的HLS播放:

1、对符合Apple,对符合Apple HLS 规范的播放终端,你可以用上面的URL。(注:苹果的规范是为每一路音频生成一个独立的播放列表)。

2、对于不符合Apple HLS规范的播放终端,你需要把上面url中的index替换为video,如下:

http://flussonic:8080/ort/video-1409148900-3600.m3u8

或采用下面的url,以支持回退到个时间点。

http://flussonic:8080/ort/video-1409148900-now.m3u8

或采用下面的url,从某个固定的时间点开始播放:

http://flussonic:8080/channel/timeshift_abs_video-1409148900.m3u8

使用HDS播放,请使用下面的URL:

http://flussonic:8080/channel/archive/1350274200/4200/manifest.f4m

http://flussonic:8080/channel/archive/1350274200/now/manifest.f4m

使用HTTP-MPEGTS播放,请使用下面的URL:

http://flussonic:8080/channel/archive/1350274200/4200/mpegts

使用DASH播放,请使用下面的URL:

http://flussonic:8080/channel/Manifest-1350274200-4200.mpd

使用RTMP播放,请使用下面的URL:

rtmp://flussonic/static/ort?from=1398267588&to=1398268588

其中参数from表示开始时间,参数to是结束时间,它是可选的。另外你也可以加上speed=2, speed=4 或 speed=8这样的参数,快速播放(但没有声音)

如果是使用基于Flash的RTMP播放,请参考下面的代码(以JWPlayer为例):

var flashvars = {

streamer:'rtmp://flussonic/static',

file: 'ort?from=1398267588&to=1398268588',

'rtmp.tunneling':false,

autostart: true

};

swfobject.embedSWF('/flu/jwplayer.swf',element,'640','480','10.3','false', flashvars,

{allowfullscreen:'true',allowscriptaccess:'always'},

{id:'jwplayer',name:'jwplayer'}

);

注意:上面streamer参数中的rtmp连接URL中的"static"是rtmp规范中的Application Name,也可以使用"rtmp"。但是如果你的流名本身就带有斜杠"/",那么斜杠"/"前面的部分就默认为Application Name,斜杠"/"后面的部分默认为Stream Name。

使用RTSP播放,请使用下面的URL:

rtsp://flussonic/ort?from=1398267588&to=1398268588

参数和上面介绍rtmp播放url的一样。

如果你的直播源在某一段时间出现了中断(比如网络异常断开1分钟),那么这段时间录制的内容是空的,默认情况下,在Hls播放的切片列表中,这一段时间是空的列表,导致画面暂停不动。

如果你要跳过这段时间,请使用ignore_gaps=true参数。如下:

http://your-flussonic-server-domain/your-stream/timeshift_abs-123123123.m3u8?ignore_gaps=true

我们接下来继续学习,如何利用录制的视频实现直播时移功能。

播放直播时移内容时,有两种方式来确定开始时间点,一个是相对时间,比如相对现在最新的时间点回退1个小时;另一个是给定一个绝对时间(Unix时间戳)。播放URL格式如下:

相对时间:

MPEG-TS: http://flussonic:8080/channel/timeshift_rel/3600

HLS: http://flussonic:8080/channel/timeshift_rel-3600.m3u8

mono HLS://flussonic:8080/channel/timeshift_rel_mono-3600.m3u8

绝对时间:

MPEG-TS: http://flussonic:8080/channel/timeshift_abs/1350274200

HLS: http://flussonic:8080/channel/timeshift_abs-1409148900.m3u8

hls: http://flussonic:8080/channel/timeshift_abs_video-1409148900.m3u8

如果你需要配置一个直播流,它的内容来自Flussonic Media Server上的另一个直播流,只是延后一个固定时间(比如1小时),可以用下面的方式来配置:

stream channel {

url tshttp://vlc:9090;

dvr /storage 10080;

}

stream channel-1hour timeshift://channel/3600;

接下来,我们了解一下,如何将这些录制的文件导出为MP4文件:

请使用下面的URL在内存中生成MP4文件,并下载到本地:

http://flussonic:8080/channel/archive-1350274200-4200.mp4

请使用下面的URL在内存中生成TS文件,并下载到本地:

http://flussonic:8080/channel/archive-1350274200-4200.ts

请使用下面的URL在Flussonic Media Server上生成MP4文件,存储的路径和原始录制数据在同一个目录下:

http://flussonic:8080/channel/save-mp4-1350274200-4200?file=recording1.mp4

下面,我们介绍关于DVR的API,如下面所示,你可以用from,duration或者to这样的参数来查询录制信息:

curl 'http://flussonic:8080/myStream/recording_status.json?from=1492776600&duration=3600'

调用这个http接口后,你会得到下面的响应:

[{"stream":"myStream","ranges":[{"duration":3642,"from":1492776599}],"brief_thumbnails":[1492776599,1492776605,1492776617,1492776629,1492776641,1492776653,

1492776665,1492776677,1492776689,1492776701,1492776713,1492776725,1492776737,1492776749,1492776761,1492776773,1492776785,1492776797,1492776809,1492776821,

1492776833,1492776845,

....]}]

锁定一段录制内容,防止被自动删除。因为存储容量、存储时间范围的限制,有些已经录制的内容会被自动删除,Flussonic提供了一个机制,可以用API来让某段时间的录制内容不被自动删除掉。

curl -u flussonic:letmein! --

data '{"stream":"ort","from":1483971680,"duration":1000}' http://192.168.2.3:8080/flussonic/api/dvr/lock

你可以用API查询,哪些录制内容已经被锁定了。如下:

curl http://192.168.2.3:8080/ort/recording_status.json?from=1483970680\&to=now\&request=ranges,locks

得到的响应如下:

[{"stream":"ort","ranges":[{"duration":3687,"from":1483970675},{"duration":56758,"from":1483974376},{"duration":332,"from":1484031143}],

"locks":[{"duration":1004,"from":1483971680}]}]

DVR也支持集群功能,也就说在源服务上录制,然后实时备份到其它服务器上。请参考如下服务器的配置:

source origin1 {

dvr /storage 2d;

}

在上面的配置中,用source指令定义了一个源服务器(主机名、域名或IP地址),这样源服务器就会将录制的内容文件自动发送到这台服务器上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值