对RTSP/RTP的转发和分发一直都是EasyDarwin的基础功能,尤其是在安防行业中,EasyDarwin非常贴合安防监控的需求,但一直未尝试用EasyDarwin进行IPTV的RTSP流进行转发,直接测试了一下转发功能,果然是不行的,那么我们就需要进行逐步的问题分析和解决了:

1、先通过RTSPClient将数据获取到本地:

我们在尝试用EasyRTSPClient命令行直接请求IPTV RTSP流:

从上面可以看到,live555直接请求IPTV RTSP时,IPTV服务器返回给客户端的sdp信息中的m=字段,这个媒体类型live555是无法识别的,也就是MP2T(mpeg2-ts)流,从抓包来看,电信IPTV也就是将ts流通过RTP进行打包分发的,而我们的转发服务器也不需要经过任何的RTP组包和封包流程,直接将获取到的RTP数据进行转发就行了,那么,我们第一步就是进行live555的改造,让live555能够识别MP2T数据流即可:

这样的话,我们就能够将IPTV的RTSP TS流获取到本地了;

2、EasyDarwin进行RTSP/RTP转发

EasyDarwin进行RTSP/RTP的转发流程中,RTSP的转发指的是sdp的转发,我们将RTSPClient中输出的RTP数据,直接提交给EasyDarwin进行分发就可以了,这个过程我们参考的是RTSPSession::HandleIncomingDataPacket()方法的流程做的,将数据提交给QTSSReflectorModule进行分发就可以了:

QTSS_Error	QTSSCallbacks::QTSS_ReflectRTPTrackData(QTSS_Object inObject, const char* inData, UInt32 inDataLen, UInt32 inTrackID)
{
QTSS_RoleParams packetParams;
packetParams.rtspRelayingDataParams.inRTSPSession = inObject;
packetParams.rtspRelayingDataParams.inPacketData = (char*)inData;
packetParams.rtspRelayingDataParams.inPacketLen = inDataLen;
packetParams.rtspRelayingDataParams.inChannel = inTrackID*2; UInt32 fCurrentModule = 0;
UInt32 numModules = QTSServerInterface::GetNumModulesInRole(QTSSModule::kRTSPRelayingDataRole);
for (; fCurrentModule < numModules; fCurrentModule++)
{
QTSSModule* theModule = QTSServerInterface::GetModule(QTSSModule::kRTSPRelayingDataRole, fCurrentModule);
(void)theModule->CallDispatch(QTSS_RTSPRelayingData_Role, &packetParams);
} return 0;
}

如此一来,我们就实现了整个从数据获取,到转发分发的过程,效果如图:

EasyDarwin IPTV转发版本下载:

http://pan.baidu.com/s/1jGZBB98

关注EasyDarwin开源项目:

WEB: www.easydarwin.org

Github: https://github.com/easydarwin

用EasyDarwin进行IPTV rtsp mpeg-ts smil流的转发和分发直播服务的更多相关文章

  1. EasyPusher实现将asterisk直播流以RTSP转发实现通话直播与录像

    本文转自博客:http://blog.csdn.net/jinlong0603/article/details/56047145 EasyPusher RTP直播推送介绍 EasyPusher是一个推 ...

  2. 关于ES、PES、PS/TS 码流

    一.基本概念 )ES   ES--Elementary  Streams  (原始流)是直接从编码器出来的数据流,可以是编码过的视频数据流(H.264,MJPEG等),音频数据流(AAC),或其他编码 ...

  3. ffmpeg利用libav库把yuv视频流转换为TS串流

    今天到月末了,才发我这个月的第一篇文章,因为这个月前三周一直在看ffmpeg的libavcodec和libavformat两个库源码.实验室要做一个“小传大”的软件,就是android手机或平板电脑的 ...

  4. 利用FFmpeg 将 rtsp 获取H264裸流并保存到文件中

    既然已经可以通过 RTSP 获取h264 裸流了.那么通过 FFmpeg 将其保存到文件中怎么做呢? 一.首先RTSP获取 h264 裸流 我们上面两篇文章主要讲的是通过 rtsp://Your ip ...

  5. 基于live555开发嵌入式linux系统的rtsp直播服务

    最近要搞一个直播服务,车机本身是个前后双路的Dvr,前路1080P 25fps,后路720P 50fps,现在要连接手机app预览实时画面,且支持前后摄像头画面切换. 如果要做直播,这个分辨率和帧率是 ...

  6. EasyDarwin流媒体服务器RTSP拉模式流媒体转发模块设计

    拉模式转发 拉模式转发,顾名思义就是服务器主动从源端(IPCamera.NVR.或者其他流媒体服务器)通过RTSP/RTP协议将流媒体音视频数据拉取到流媒体转发服务器,再通过内部分发调度机制,分发给请 ...

  7. 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——收流篇:(二)示例

    一.搭建RTSP服务器 要想测试RTSP客户端,没有服务端怎么行呢?然而,有时候条件有限,手头并没有独立的RTSP服务器拿来用,那么我们不妨自己撘一个. 以下有2种方便的做法可供选择: 第一种:使用v ...

  8. EasyDarwin+ffmpeg进行PC(摄像头+麦克风)流媒体直播服务

    上一回我们描述了用EasyDarwin+ffmpeg进行摄像机直播的过程:ffmpeg推送,EasyDarwin转发,vlc播放 实现整个RTSP直播 我们再进行一个方面的描述,那就是pc摄像头+麦克 ...

  9. rtsp实时流通过rtmp推送到服务端

    很多朋友都会问到rtsp如何通过rtmp协议推送到服务端,正好前段时间开发了这个功能写在这里,和大家分享下. 首先我想说的是:ffmpeg可以实现这个功能.ffmpeg支持rtsp协议,也支持rtmp ...

随机推荐

  1. hdu 5578 Friendship of Frog

    题意:给定一行字符串(都是小写字母),每一个字符都代表一只青蛙以及其国籍,若字符串中出现两个字符相同,则这两个字符所代表的青蛙来自同一国度,可称之为好朋友. 现在需要找到距离最近的好朋友并输出他们的距 ...

  2. net9:磁盘目录文件保存到XML文档及其XML文档的读写操作,以及绑定XML到treeview

    原文发布时间为:2008-08-10 -- 来源于本人的百度文章 [由搬家工具导入] directorytoxml类: using System;using System.Data;using Sys ...

  3. StarUML 系列,静态图与动态图,用例图,类图【ps:熟悉一下starUML】

    大部分:   静态图部分,即静态不动的图 1.用例图, Use case diagram 1.展示系统核心功能及与其交互的用户ACTOR 表示:椭圆

  4. os.system() 和 os.popen()

    1.os.popen(command[, mode[, bufsize]])  os.system(command) 2.os.popen() 功能强于os.system() , os.popen() ...

  5. 开发使用mysql的一些必备知识点整理(四)与python交互

    与python交互 在熟练使用sql语句的基础上,开始使用python语言提供的模块与mysql进行交互 这是我们在工作中大事要做的事 先学会sql是基础,一定要熟练编写sql语句 安装引入模块 安装 ...

  6. html5(拖拽2)

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  7. 牛客网 Wannafly挑战赛9 A.找一找-数据处理

    好几天没好好学习了(咸鱼晒干了) 把稍微没那么咸鱼的几天前的一场牛客网的比赛稍微看了一下,菜的要死,这一场大数的比较多,都死了. A.找一找 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C ...

  8. Spring IOC知识java反射

    [1] Java反射知识-->Spring IoC :http://www.iteye.com/topic/1123081 [2] Java动态代理-->Spring AOP :http: ...

  9. 精简版的MySQL制作步骤

    1.删除所有的目录,只保留 datasharebin 2.删除BIN下面除以下三个文件之外的所有文件: libmysql.dll(MYSQL5中的文件,在MYSQL5.5中不存在)mysqladmin ...

  10. 椭圆人头跟踪bmp图像序列 BMP Image Sequences for Elliptical Head Tracking

    BMP Image Sequences for Elliptical Head Tracking The BMP image sequences used in the head tracking d ...