Darwin推流存储实现介绍 之一
2016-08-12 16:06
211 查看
给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的分析仅限于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推流存储实现介绍 之二
- Tair rdb(redis存储引擎)实现介绍
- 本文给出了一种方便实用的解决大文件的读取、存储等处理的方法,并结合相关程序代码对具体的实现过程进行了介绍
- 队列的两种存储方式的介绍与实现
- Kubernetes存储系统介绍及机制实现
- [数据结构][C语言]图的基本介绍和操作实现之图的存储结构
- Kubernetes存储系统介绍及机制实现
- 直播 | Kubernetes存储系统介绍及机制实现
- windows mobile/wince 大容量存储驱动实现介绍
- 队列的两种存储方式的介绍与实现(后续)
- 关于datagrid的使用以及动态修改,以及使用存储过程的介绍
- ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页
- ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页
- 文件分割存储用例的实现过程(3)
- 存储过程介绍及asp存储过程的使用 选择自 aedn 的 Blog
- ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页
- NAS存储产品介绍
- ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页
- 项目迭代开发手记--文件分割存储用例的实现过程(3)
- 文件分割存储用例的实现过程(2)