背景

近期跟开源团队商量,想在EasyDarwin上继续做一些功能扩展,目前EasyDarwin开源流媒体服务器只能够实现高效的RTSP推流直播转发/分发功能,输入与输出都是RTSP/RTP流,不能够很好滴满足当下日益火热的互联网直播/录播的需求,我们计划在当前节点EasyDarwin-v7.3.17.0325基础上继续扩展几个功能:

  1. EasyDarwin服务器端直播存储功能;
  2. 对RTSP直播推流同步输出RTMP、HLS直播功能;
  3. 直接接入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后续的功能迭代的需求!

获取更多信息

邮件:support@easydarwin.org

WEB:www.EasyDarwin.org

Copyright © EasyDarwin.org 2012-2017

EasyDarwin开源流媒体服务器实现RTSP直播同步输出MP4、RTMP、HLS的方案思路的更多相关文章

  1. EasyDarwin开源流媒体服务器低延时直播之转发缓存跟进算法

    前言 前一段时间,我们为EasyDarwin实现了客户端快速显示画面/听到同步声音的缓存关键帧检索方案,具体的实现方法分别在<EasyDarwin手机直播是如何实现的快速显示视频的方法>和 ...

  2. EasyDarwin开源流媒体服务器进行RTSP转发过程中将sdp由文件存储改成内存索引

    -本篇由团队成员Fantasy供稿! 原始版本 在Darwin Streaming Server版本中,推送端DoAnnounce的时候后服务器会根据easydarwin.xml中配置的movies_ ...

  3. 解决用EasyDarwin开源流媒体服务器做HLS直播时Flash Player卡住的问题

    最近在开发EasyDarwin开源流媒体服务器HLS直播的时候发现一个现象:在PC上用flash player播放HLS和在ios上面播放HLS时,效果明显不同,在ios上播放非常稳定,而在flash ...

  4. NodeJS版本EasyDarwin开源流媒体服务器开发心得

    title: Node版本EasyDarwin开发心得 date: 2018-03-27 22:46:15 tags: 年后着手Node版本EasyDarwin的开发工作,截止到今天2018年03月2 ...

  5. EasyDarwin开源流媒体服务器Golang版本:服务端录像功能发布

    EasyDarwin开源流媒体服务器(www.easydarwin.org)现在使用Go版本实现了.最新的代码提交,已经支持了推流(或者拉流)的同时进行本地存储. 本地存储的原理,是在推流的同时启动f ...

  6. EasyDarwin开源流媒体服务器Golang版本:拉转推功能之拉流实现方法

    EasyDarwin开源流媒体服务器(www.easydarwin.org),拉转推是一个很有意义的功能,它可将一个独立的RTSP数据源"拉"到服务器,再通过转发协议转发给多个客户 ...

  7. EasyDarwin开源流媒体服务器将select改为epoll的方法

    本文来自EasyDarwin团队Fantasy(fantasy(at)easydarwin.org) 一. EasyDarwin网络模型介绍 EventContext负责监听所有网络读写事件,Even ...

  8. EasyDarwin开源流媒体服务器性能优化之Work-stealing优化方案

    本文转自EasyDarwin开源团队成员Alex的博客:http://blog.csdn.net/cai6811376/article/details/52400226 EasyDarwin团队的Ba ...

  9. EasyDarwin开源流媒体服务器提供的TS切片/HLS直播打包库

    EasyHLS  Github:https://github.com/EasyDarwin/EasyHLS EasyHLS是什么? EasyHLS是EasyDarwin开源流媒体社区开发的一款HLS打 ...

随机推荐

  1. 【BZOJ1018】堵塞的交通traffic(线段树,网格图,连通性)

    题意:一个2行C列的矩形网格图,网格上的每个点代表一个城市,相邻的城市之间有一条道路 一开始每条道路都是堵塞的,堵塞即为不可经过.经过一些操作后,可能某些道路通畅了,也可能某些道路堵塞了 多次询问,询 ...

  2. Codeforces 932 B.Recursive Queries-前缀和 (ICM Technex 2018 and Codeforces Round #463 (Div. 1 + Div. 2, combined))

    B. Recursive Queries   time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  3. luogu P3402 最长公共子序列

    题目背景 DJL为了避免成为一只咸鱼,来找Johann学习怎么求最长公共子序列. 题目描述 经过长时间的摸索和练习,DJL终于学会了怎么求LCS.Johann感觉DJL孺子可教,就给他布置了一个课后作 ...

  4. http put/delete方式请求

    HttpClient使用Delete方式提交数据 1. http请求主要有以下几种方法来对指定资源做不同操作: HTTP/1.1协议中共定义了八种方法(有时也叫“动作”)来表明Request-URI指 ...

  5. Android传统View动画与Property动画基础及比较

    前言:关于动画方面的知识也整理一段时间了,如题,这篇文章简单的介绍了View和Property动画的概念,如何在项目中创建资源文件,以及如何在代码中使用它们,本次整理动画的重点放在了Property动 ...

  6. 【spring boot】5.spring boot 创建web项目并使用jsp作前台页面

    贼烦的是,使用spring boot 创建web项目,然后我再idea下创建的,but 仅仅启动spring boot的启动类,就算整个项目都是好着的,就算是能够进入controller中,也不能成功 ...

  7. mysql 存储过程时间月份减法

    declare startTime VARCHAR(19) default '2014-00-00 00:00:00'; declare tempTime VARCHAR(19) default NO ...

  8. 转:如何mac下使用wireshark

    Mac OS Mountain Lion默认是没有安装X11的,而wireshark运行需要x11,因此如果直接安装wireshark而没有安装x11,wireshark不会正常运行. 去苹果主页下载 ...

  9. 2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告

    2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告 勘误1:第6题第4个 if最后一个条件粗心写错了,答案应为1580. 条件应为abs(a[3]-a[7])!=1,宝宝心理苦啊.!感谢zzh ...

  10. 用ELK 实时处理搜索日志

    转载请标明原处:http://blog.csdn.net/hu948162999/article/details/50563110 本来这块业务 是放到SolrCloud上去的 , 然后 採用solr ...