EasyDarwin开源流媒体服务器实现RTSP直播同步输出MP4、RTMP、HLS的方案思路
背景
近期跟开源团队商量,想在EasyDarwin上继续做一些功能扩展,目前EasyDarwin开源流媒体服务器只能够实现高效的RTSP推流直播转发/分发功能,输入与输出都是RTSP/RTP流,不能够很好滴满足当下日益火热的互联网直播/录播的需求,我们计划在当前节点EasyDarwin-v7.3.17.0325基础上继续扩展几个功能:
- EasyDarwin服务器端直播存储功能;
- 对RTSP直播推流同步输出RTMP、HLS直播功能;
- 直接接入RTSP IPCamera输出RTMP、HLS直播功能;
实现思路
在未实现之前,我们仅仅来讨论一个实现的思路,相信经过时间和实践的推移,技术问题都能够得到很好的解决!
我们考虑使用EasyDarwin集成ffmpeg的方案,实现上述功能,在之前的EasyDarwin版本(EasyDarwin-7.0.5-Build16.0518)中,我们也实现过类似于同步输出HLS的功能,当时实现同步输出的方法是,在EasyDarwin中另起一个Module,然后采用每一个同步输出的Session都通过请求当前直播RTSP流,再转换成HLS流输出的方式进行的,也就是服务器内部自己请求自己的网络流(走127.0.0.1),这种方式对音视频流的流转过于复杂,这里就不再赘述;
新的实现思路,我们希望直接在EasyDarwin内部将EasyPusher等推流工具推送来的直播流,不用再次经过网络流,而是服务器内部直接memory copy的方式将SDP+RTP数据递交给ffmpeg进行处理,直接就输出文件、RTMP、HLS;
按照上图所示,EasyDarwin内部的各个Module之间数据交互,直接就可以通过内存的形式将SDP+RTP数据,传递给各个模块进行各自对应的处理,那么关键问题就是这个sdp+RTP由QTSSReflectorModule传递给EasyRTMPModule、EasyHLSModule、EasyRecordModule这些模块如何进行处理,如何调用ffmpeg相关接口才能达到输出我们需要的数据的目的,那么这个过程,其实我们可以参考ffmpeg中关于ffmpeg获取RTSP/RTP流转换成各种output的调用流程,ffmpeg.exe获取RTSP的主要基本流程是:
DESCRIBE:获取到直播流的sdp描述信息;
SETUP、PLAY:建立RTP直播流数据传输通道;
RTP:不同track的音视频直播RTP包;
那么这整个流程对比我们EasyDarwin中的sdp和RTP数据处理流程,也就是EasyDarwin中免去了SETUP、PLAY流程,以及网络读取RTP数据的流程,直接就可以将EasyDarwin收到推送端的sdp信息和源源不断的RTP数据提交给ffmpeg处理,进行不同的输出(Record、RTMP、HLS),而这个过程中,如果视频流是H.264,音频流是AAC,那么我们就直接vcodec copy、acodec copy就行了,如果不是,那么我们就需要调用ffmpeg进行一次转码,将音视频流转成H.264&AAC;
相信模仿ffmpeg.c中的实现流程,可以满足EasyDarwin后续的功能迭代的需求!
获取更多信息
Copyright © EasyDarwin.org 2012-2017
EasyDarwin开源流媒体服务器实现RTSP直播同步输出MP4、RTMP、HLS的方案思路的更多相关文章
- EasyDarwin开源流媒体服务器低延时直播之转发缓存跟进算法
前言 前一段时间,我们为EasyDarwin实现了客户端快速显示画面/听到同步声音的缓存关键帧检索方案,具体的实现方法分别在<EasyDarwin手机直播是如何实现的快速显示视频的方法>和 ...
- EasyDarwin开源流媒体服务器进行RTSP转发过程中将sdp由文件存储改成内存索引
-本篇由团队成员Fantasy供稿! 原始版本 在Darwin Streaming Server版本中,推送端DoAnnounce的时候后服务器会根据easydarwin.xml中配置的movies_ ...
- 解决用EasyDarwin开源流媒体服务器做HLS直播时Flash Player卡住的问题
最近在开发EasyDarwin开源流媒体服务器HLS直播的时候发现一个现象:在PC上用flash player播放HLS和在ios上面播放HLS时,效果明显不同,在ios上播放非常稳定,而在flash ...
- NodeJS版本EasyDarwin开源流媒体服务器开发心得
title: Node版本EasyDarwin开发心得 date: 2018-03-27 22:46:15 tags: 年后着手Node版本EasyDarwin的开发工作,截止到今天2018年03月2 ...
- EasyDarwin开源流媒体服务器Golang版本:服务端录像功能发布
EasyDarwin开源流媒体服务器(www.easydarwin.org)现在使用Go版本实现了.最新的代码提交,已经支持了推流(或者拉流)的同时进行本地存储. 本地存储的原理,是在推流的同时启动f ...
- EasyDarwin开源流媒体服务器Golang版本:拉转推功能之拉流实现方法
EasyDarwin开源流媒体服务器(www.easydarwin.org),拉转推是一个很有意义的功能,它可将一个独立的RTSP数据源"拉"到服务器,再通过转发协议转发给多个客户 ...
- EasyDarwin开源流媒体服务器将select改为epoll的方法
本文来自EasyDarwin团队Fantasy(fantasy(at)easydarwin.org) 一. EasyDarwin网络模型介绍 EventContext负责监听所有网络读写事件,Even ...
- EasyDarwin开源流媒体服务器性能优化之Work-stealing优化方案
本文转自EasyDarwin开源团队成员Alex的博客:http://blog.csdn.net/cai6811376/article/details/52400226 EasyDarwin团队的Ba ...
- EasyDarwin开源流媒体服务器提供的TS切片/HLS直播打包库
EasyHLS Github:https://github.com/EasyDarwin/EasyHLS EasyHLS是什么? EasyHLS是EasyDarwin开源流媒体社区开发的一款HLS打 ...
随机推荐
- 挑战程序设计2 KD树
Range Query - Range Search (kD Tree) Time Limit : 1 sec, Memory Limit : 262144 KB Japanese version i ...
- vue.js源码学习分享(五)
//配置项var config = { /** * Option merge strategies (used in core/util/options)//选项合并策略 */ optionMerge ...
- Android添加永不休眠选项
很多朋友在使用TQ210做项目的时候都需要屏幕保持长亮,本文介绍如何修改TQ210 android源码,使系统可以永不休眠,代码如下: 1.添加英文选项 修改packages/apps/Setting ...
- 在4418平台上如何配置GPIO口的状态
硬件 ------------------------------------------------------------------------------------------------- ...
- Linux 之 FTP服务器搭建
FTP服务器搭建 参考教程:[千峰教育] 1.关闭防火墙: service iptables stop 2.关闭Selinux setenforce 0 3.安装所需要依赖及编译工具 yum inst ...
- LeetCode OJ--Permutations *
https://oj.leetcode.com/problems/permutations/ 写出一列数的全排列 #include <iostream> #include <vect ...
- AC日记——软件包管理器 洛谷 P2416
题目描述 Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖(即下载安装这个 ...
- Careercup | Chapter 6
6.2 There is an 8x8 chess board in which two diagonally opposite corners have been cut off. You are ...
- 东方14ACM小组 15:Challenge 11
Challenge 11 查看 提交 统计 提问 总时间限制: 10000ms 单个测试点时间限制: 1000ms 内存限制: 262144kB 描述 给一个长为N的数列,有M次操作,每次操作是 ...
- Flex 布局教程学习
转载自:阮一峰的网络日志(http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html) 网页布局(layout)是 CSS 的一个重点应用. 布局 ...