zoukankan      html  css  js  c++  java
  • EasyDarwin开源流媒体服务器实现RTSP直播同步输出MP4、RTMP、HLS的方案思路

    背景

    近期跟开源团队商量,想在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_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

  • 相关阅读:
    MATLAB 中sparse函数使用及full函数用法简单介绍(转)
    稀疏矩阵加减,乘除, 逆 (转)
    拟合方法求直线方程系数
    matlab filtfilt 函数
    Typora 精美而强大的Markdown编辑器 转
    MATLAB生成exe脱离matlab运行可执行程序
    matlab 生成.exe文件 转
    C#排序 转
    C# 进制转换(二进制、十六进制、十进制互转) 转载 https://www.cnblogs.com/icebutterfly/p/8884023.html
    一维高斯滤波 转
  • 原文地址:https://www.cnblogs.com/babosa/p/9217841.html
Copyright © 2011-2022 走看看