最近完成了一RTSP代理网关,这是第二次开发做RTSP协议相关的开发工作了,相比11年的简单粗糙的版本,这次在底层TCP/IP通讯和RTSP协议上都有了一些新的积累,这里记录一下。基本的RTSP协议交互流程去读rfc2326就可以了,这里就不赘述了。这里说一些实际用VLC/MPlayer进行测试时,发现的与媒体数据收发相关的细节问题,如下

1,SETUP请求之后,播放器会向在SETUP请求中协商的通讯端口发送NAT穿透UDP消息(UDP作为底层传输协议时),其作用如下

当播放器与服务器之间隔有路由器时,这些消息可以触发这些路由器在NAT表中增加对应SNAT表项,实现打洞,服务端在接受到这些消息时,应该从UDP消息中取出对应NAT映射后的IP/端口作为实际媒体数据发送目的地,如此的话媒体数据包即可沿着刚才这些消息打的洞,逐级的返回到原始的播放器,否则由于NAT代理的原因,在外部是无法直接将媒体数据包发给路由器后面的播放器的。

2,Transport头:本身的作用是用于客户端与服务的协商通讯参数的,其中消息中的destination/source分别只是了本条消息的目的IP和源IP,若服务端在Transport中指定了IP,那么后续NAT穿透包即以此处指定的IP作为目的地。如果Server也是在在路由器后面,通过端口映射的方式对外提供服务,而在SETUP相应中,直接通过getsockname()获取服务接口的IP,那么对应获取到的是服务主机在内网的IP,若将此IP填入到Transport的source中,那么播放器后续会以此IP作为目的IP发送NAT穿透消息,这样自然是错误的。

解决方法是在SETUP响应中Transport头中可以不包含source字段,播放器会参考Content-Base头中的IP,或以RTSP链接的目的IP作为NAT穿透消息发送目的IP

3,Content-Base头:本身是用于指定相对路径的base路径,实际完整的路径是Content-Base指定的url+给定的相对路径组成的,这个在rfc2068-http 14.11节中有描述,但这也会影响播放器发送NAT穿透消息时的目标地址。见上面Transport头中描述的内容

4,采用UDP作为媒体数据发送数据时,最好也简单实现一个类似于TCP慢启动的机制,否则在non-block fd上短时间内快速的发送大量的数据时,会很容易出现EWOULDBLOCK的错误。其中原因请参考TCP慢启动相关的资料。

~~end

RTSP协议媒体数据发包相关的细节的更多相关文章

  1. 从RTSP协议SDP数据中获得二进制的SPS、PPS

    在RTSP协议的交互过程中,第二步客户端发送DESCRIBE请求之后,服务端会返回SDP内容,该SDP内容中有关于媒体和会话的描述,本篇文章主要给出如何从SDP字符串中得到H264视频信息中的sps. ...

  2. RTSP协议

        1.RTSP与几个相关协议 RTSP(Real Time Streaming Protocol)实时流协议,是用来控制声音或影像的多媒体串流协议,并允许同时多个串流需求控制,传输时所用的网络通 ...

  3. RTSP协议介绍 (转)

    1. 实 时流协议RTSP RTSP[3]协 议以客户服务器方式工作,它是一个多媒体播放控制协议,用来使用户在播放从因特网下载的实时数据时能够进行控制,如:暂停/继 续.后退.前进等.因此 RTSP ...

  4. rtsp 协议 详细讲解

    转载自:http://www.mikewootc.com/wiki/net/protocol/rtsp.html 目录: 概述 RTSP简介 协议特点 协议细节 典型的rtsp交互过程 RTSP消息格 ...

  5. HTTP协议/RTSP协议/RTMP协议的区别

    RTSP. RTMP.HTTP的共同点.区别 共同点: 1:RTSP RTMP HTTP都是在应用应用层. 2: 理论上RTSP RTMPHTTP都可以做直播和点播,但一般做直播用RTSP RTMP, ...

  6. RTSP协议、RTMP协议、HTTP协议的区别

    理论上RTSP RTMPHTTP都可以做直播和点播,但一般做直播用RTSP RTMP,做点播用HTTP.做视频会议的时候原来用SIP协议,现在基本上被RTMP协议取代了. RTSP. RTMP.HTT ...

  7. RTSP协议学习笔记

    一.        RTSP协议概述 RTSP(Real-Time Stream Protocol )是一种基于文本的应用层协议,在语法及一些消息参数等方面,RTSP协议与HTTP协议类似. RTSP ...

  8. 【转】RTSP协议学习笔记

    第一部分:RTSP协议 一. RTSP协议概述 RTSP(Real-Time Stream Protocol )是一种基于文本的应用层协议,在语法及一些消息参数等方面,RTSP协议与HTTP协议类似. ...

  9. RTSP协议简介(转载)

    转自:http://ilinux.iteye.com/blog/505753 Real Time Streaming Protocol 或 者RTSP(实时流媒体协议),是由Real network ...

随机推荐

  1. MySQL5.5绿色版1067

    mysql的绿色安装版,按照很多文章进行配置,会出现 配置文件里面添加了 [client] default-character-set=utf8 [mysqld] default-character- ...

  2. gitt

    一,git config core.autocrlf false 二,vi .git/config[remote "origin"] url = https://github.co ...

  3. C# 中 多线程同步退出方案 CancellationTokenSource

    C# 中提供多线程同步退出机制,详参对象: CancellationTokenSource CancellationTokenSource 中暂未提供复位操作,因此当调用Cancle 之后,若再次调用 ...

  4. .NET C# 将 mdb 中数据读为 list<string[]> 其中 path 为数据库地址 ,sql 为查询语句

    using System.Data; using System.Data.OleDb; public static List<string[]> select_list(string pa ...

  5. Y+的查看及FLUENT壁面函数的选择

    y+的查看 其实,我们关心的应该是壁面y+值.那么我们看云图的话,是可以直接看到的,但是个人感觉,如果case大的话,也不是很方便.此外,你要是看云图的话,要用filled的方式,而且把node va ...

  6. ASP.NET后台调用前台JS函数的三种常见方法

    第一种:使用普通的添加控件中的Attributes属性进行调用 例如,像一般的普通的按钮:Button1.Attributes.Add("onclick","MyFun( ...

  7. 爱上iOS单元测试系列之爱上她就要先了解她:单元测试入门

    前言 对于单元测试一开始我是拒绝的.单元测试是一个什么东东,因为我喜欢做iOS开发是因为喜欢写APP的啊,一切和这一目标不相干的东西我没兴趣啊,所以从事iOS开发几年都没去深入学习过单元测试(主要是之 ...

  8. mysql 同一IP 产生太多终端的数据库连接导致阻塞

    问题:null, message from server: "Host 'ip' is blocked because of many connection errors; unblock ...

  9. HYSBZ 2243

    //Accepted 18440 KB 5556 ms /* source:HYSBZ 2243 time :2015.5.29 by :songt */ /*题解: 树链剖分 */ #include ...

  10. android系统自带的日期、时间对话框的用法

    代码: package com.test; import java.util.Calendar; import android.app.Activity; import android.app.Dat ...