我是靠谱客的博主 失眠树叶,最近开发中收集的这篇文章主要介绍RTSP协议 RTP协议,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

RTSP(Real-Time Streaming Protocol)实时流式协议

需要注意的是,RTSP本身不传输数据,音视频流数据是通过RTP传输的。

image

C/S请求应答整体流程:

客户端->>服务器:DESCRIBE
服务器->>客户端: 200 OK (SDP)
客户端->>服务器:SETUP
服务器->>客户端: 200 OK
客户端->>服务器:PLAY
服务器->>客户端: (RTP包)

RTSP请求报文的结构如下图所示

image

RTSP响应报文的结构如下图所示

image

一次完整的会话抓包分析:

 

 

 

可以看到抓包序列从407到419为客户端与服务端信息交互的过程,从420开始则是服务端用RTP发送过来的音视频流数据。 

RTP(Real-Time Transport Protocol)实时运输协议是IEFT的AVT工作组开发的协议,为实时应用提供端到端的运输服务,但不提供任何服务质量的保证,它有两种工作模式:TCP 和 UDP。

RTP协议构造很简单,它就是在音视频数据的头部加上RTP的数据头来区分识别音视频流数据,以确保客户端能正确解析数据而已。

RTP协议头数据犹如结构体:

typedef struct RtpHdr_s
{
 
#if (BYTE_ORDER == LITTLE_ENDIAN)
    /* byte 0 */
    u16 cc      :4;   /* CSRC count */
    u16 x       :1;   /* header extension flag */
    u16 p       :1;   /* padding flag */
    u16 version :2;   /* protocol version */
    /* byte 1 */
    u16 pt      :7;   /* payload type */
    u16 marker  :1;   /* marker bit */
#elif (BYTE_ORDER == BIG_ENDIAN)
    /* byte 0 */
    u16 version :2;   /* protocol version */
    u16 p       :1;   /* padding flag */
    u16 x       :1;   /* header extension flag */
    u16 cc      :4;   /* CSRC count */
    /*byte 1*/
    u16 marker  :1;   /* marker bit */
    u16 pt      :7;   /* payload type */
#else
    #error YOU MUST DEFINE BYTE_ORDER == LITTLE_ENDIAN OR BIG_ENDIAN !
#endif
    /* bytes 2, 3 */
    u16 seqno  :16;   /* sequence number */
    /* bytes 4-7 */
    int ts;            /* timestamp in ms */
    /* bytes 8-11 */
    int ssrc;          /* synchronization source */
}RtpHdr_t; 

参考列表:



RTSP协议详解(转载)_黑面狐-CSDN博客_rtsp协议

RTSP协议实例分析_dosthing的博客-CSDN博客_rtsp协议

最后

以上就是失眠树叶为你收集整理的RTSP协议 RTP协议的全部内容,希望文章能够帮你解决RTSP协议 RTP协议所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部