背景

近期跟开源团队商量,想在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. 自己写的微信小程序炸金花简单版

    app.json: { "pages":[ "pages/index/index" ], "window":{ "navigati ...

  2. Scrapy学习-11-Selector对象使用

    Selector使用 使用背景 我需要使用类似spider项目中,response使用的xpath和css获取页面指定数据,但因为爬取页面较小我们不想创建一个spider项目时,就可以使用scrapy ...

  3. React项目的打包与部署到腾讯云

    腾讯云送了30天的免费试用,于是有了把react项目部署到上面的想法.项目是默认生成的,只是一个页面,但是这个过程中也遇到了不少麻烦与问题.下面来具体梳理下: create-react-app 来自F ...

  4. java并发之hashmap

    在Java开发中经常会使用到hashmap,对于hashmap又了解多少,经常听到的一句话是hashmap是线程不安全的,那为什么是线程不安全的,如何才能保证线程安全,JDK又给我们提供了那些线程安全 ...

  5. Java定义接口变量为接收类型有什么好处(面向接口编程)

    个人理解:定义接口变量为接收类型属于面向接口的编程,通过接口的抽象能减少类之间的耦合,增加可复用性. 面向接口编程: 一种规范约束 制定者(或者叫协调者),实现者(或者叫生产者),调用者(或者叫消费者 ...

  6. 终极报错解决方案:Error:Execution failed for task ':app:processDebugManifest'. > Manifest merger failed with

    遇到这个报错的时候,不要慌 Error:Execution failed for task ':app:processDebugManifest'. > Manifest merger fail ...

  7. 制作一个可以滑动操作的 Table View Cell

    本文转载至 https://github.com/nixzhu/dev-blog Apple 通过 iOS 7 的邮件(Mail)应用介绍了一种新的用户界面方案——向左滑动以显示一个有着多个操作的菜单 ...

  8. 基于HTML5的PACS--HTML5图像处理

    在此之前,此系统是结合DICOM的WADO标准,在浏览器里通过javascript操作返回的JPG图片.这种服务器端解析,客户端展现的方式,对实现图像的移动.缩放.旋转.测量等图像操作能够实现实时的交 ...

  9. Linux Distribution

    来自为知笔记(Wiz)

  10. d3js 获取元素以及设置属性

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...