Darwin推流存储实现介绍 之一

来源:互联网 发布:免谷歌软件下载商店 编辑:程序博客网 时间:2024/05/19 02:21

给Darwin服务器推送的流能否存储为文件,答案是肯定的,只是什么时候存,怎么存,存储的时机问题需要对Darwin的源码好好分析。


受限于项目进度,对Darwin的分析仅限于QTSSReflectorModule模块。


确定推流存储方案的时候,我们是把推流和推流过程中的拉流一起来分析的,在分析完推流过程中的拉流后,基本上就确认了在Darwin上扩展存储功能的方案了。


先大概梳理下Darwin推流中用到的几个组织概念:

推流的SessionMap,用来存储推流的sdp地址和推流的session对象

Session:一个会话(ReflectorSession)

Stream:流,一个会话可以包括多个流,一般是一个视频流,一个音频流(RtpStream)

Output:一个推送的流可以对应多个Output,这样就做到了一对多的转发 (ReflectorOutput)


自此确认了这几个概念后,大的改造方案就出来了:在给Darwin推流过程中,这个Session的多个流是没有Output的,一旦有播放请求过来后,这个Session对象中的Stream就会增加Output;那么我们确认的方案就是,在推流创建的过程中,我们给这个Session的Stream增加一个Output,这个Output的作用就是用来将接收到的RTP包写到文件中,基本方案就确定了(这里说明下,因为我们项目只要求单独存储视频或者音频,所以我们只在视频流的Setup中增加了Output,如果需要将音视频同时存储,那方案就需要调整了。)


0 0
原创粉丝点击