使用Flash Media Server(FMS)录制mp4格式的视频

最近在做一个有关视频直播和点播的项目,客户的一个需求就是可以控制对直播流的录制,直播的实现采用的是Adobe的Flash Media Server,具体方式就是:视频采集端采集视频并编码->rtmp流输出->FMS服务器->rtmp流广播->客户端播放器加载rtmp流->播放;直播流的录制采用在FMS服务器上录制的方式,而不是在视频采集设备端进行录制。

由于客户要求进行可控录制,所以不能采用那种在视频流发送端就写好参数如: nc.publish("livestream","record") 的方式,而是采用了Adobe提供的一个用于FMS的Application,叫做dvrcast,它的实现实际是写了好多的FMS服务器端的as代码(.asc格式的文件),通过调用FMS服务器端的Stream类的record方法来进行录制,通常record方法会录制为.flv文件,最近通过查看FMS自带的一些开发文档,终于搞清楚了如何将视频流录制为.mp4文件,具体方法如下:

 

假设 视频采集端发过来的视频流是livestream,如  nc.publish("livestream","live");//采用直播模式发送

在服务器端想对该视频进行录制,则使用如下代码:

s=Stream.get("mp4:yourRecordName.mp4");//获取一个Stream对象,注意参数,录制mp4或f4v文件时,必须加前缀"mp4:",yourRecordName是你想保存的名字

if(s){

s.record("record");//开始录制,"record"参数可选,表示如果存在yourRecordName.mp4文件,会进行覆盖

s.play("livestream");//此句比较重要,如果不写的话,你会发现所创建的.mp4文件体积不变,此句代码相当于FMS服务器端接管了livestream流的publish工作,因为服务器端的play方法优先于视频采集端的publish方法

}

 

如果想停止录制,则代码如下:

s=Stream.get("yourRecordName");//可以写"mp4:yourRecordName.mp4",也可以只写yourRecordName

if(s) s.record(false);//停止录制

 

所录制的视频文件可以通过FMS服务器进行点播播放。

但悲催的是,我现在发现,录制的mp4视频文件不能用播放器打开,也就是说,用户下载到本地后将无法使用播放器进行观看,而只能在网上通过点播服务来观看,不知道为什么,FMS录制的mp4格式和平常的mp4格式不一样吗???   这还是个不小的问题啊,希望有做过这方面的同志能够给与我帮助!  不胜感激!!!

QQ:2429200513

posted @ 2012-10-31 22:35  xiaoSoldier  阅读(5529)  评论(1编辑  收藏  举报