本文主要是介绍Darwin推流存储实现介绍 之一,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
给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,如果需要将音视频同时存储,那方案就需要调整了。)
这篇关于Darwin推流存储实现介绍 之一的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!