RTSP协议的实现

简介: RTSP协议的实现

说明

  • 本内容是建立在“1.RTSP协议介绍.md”基础之上的
  • 目前代码仅实现RTSP交互部分,暂未发送实际视频数据,所以VLC播放器暂时是看不到视频的

源码

  • "test/001/test_rtsp_server.c"

源码测试

  • 首先将linux系统IP地址设置为"192.168.1.141"
  • 编译:gcc test_rtsp_server.c -lpthread
  • 运行:./a.out
  • 打开“VLC”播放器,选择“媒体”->“打开网络串流”,输入网络URL:rtsp://192.168.1.141:554
  • 点击播放后,控制台将会打印RTSP交互过程

源码讲解

  • 按照socket服务器编程模式,只不过rtsp服务器不单单只有rtsp server,还有rtp server和rtcp server共三个部分
  • rtsp负责交互控制(这也是目前实现的部分,rtp、rtcp目前均未实现)、rtp负责数据音视频传输、rtcp负责传输音视频质量控制
/*******************************RTSP STSRT**********************************/
// rtsp-创建套接字
rtspServerSockfd = socket(AF_INET, SOCK_STREAM, 0);
// rtsp-绑定套接字
bind(rtspServerSockfd, (struct sockaddr *)&rtsp_addr, sizeof(rtsp_addr));
// rtsp-开启监听
listen(rtspServerSockfd, 1); // 最多只有1个客户端连接
/*******************************RTSP END***********************************/
/*******************************RTP STSRT**********************************/
// rtp-创建套接字
rtpServerSockfd = socket(AF_INET, SOCK_STREAM, 0);
// rtp-绑定套接字
bind(rtpServerSockfd, (struct sockaddr *)&rtp_addr, sizeof(rtp_addr));
/*******************************RTP END************************************/
/*******************************RTCP START*********************************/
// rtcp-创建套接字
rtcpServerSockfd = socket(AF_INET, SOCK_STREAM, 0);
// rtcp-绑定套接字
bind(rtcpServerSockfd, (struct sockaddr *)&rtcp_addr, sizeof(rtcp_addr));
/*******************************RTCP END***********************************/
while(1)
{
    ...
    // rtsp-等待客户端连接
    accept(rtspServerSockfd,  (struct sockaddr *)&addr_client, &addr_len);
    // rtsp-创建客户端处理线程
    pthread_create(&client_thrd, NULL, pthread_handle_client, pthread_arg);
}
• 执行顺序:socket -> bind -> listen -> accept -> pthread_handle_client
• 当有客户端连接后,创建线程。执行pthread_handle_client函数,接下来看pthread_handle_client函数实现
// pthread_handle_client函数实现
while(1)
{
    // 接收客户端发来的数据
    recv_len = recv(clientSockfd, rx_buf, RX_MAX_SIZE, 0);
    // 解析客户端发来的数据
    getFirstLineFromBuf();
    sscanf();
    /* 根据第一行解析的method的不同分别实现对应的响应返回,分别是:
    ** OPTIONS    -   handleCmd_OPTIONS()
    ** DESCRIBE   -   handleCmd_DESCRIBE()
    ** SETUP      -   handleCmd_SETUP()
    ** PLAY       -   handleCmd_PLAY()
    ** TEARDOWN   -   handleCmd_TEARDOWN()
    */
    handleCmd_XXXX();
    send(clientSockfd, tx_buf, strlen(tx_buf), 0);
}
目录
相关文章
|
9月前
|
编解码 网络协议 流计算
RTSP协议介绍
RTSP协议介绍
428 0
|
容器
RTSP协议学习笔记
一、        RTSP协议概述 RTSP(Real-Time Stream Protocol )是一种基于文本的应用层协议,在语法及一些消息参数等方面,RTSP协议与HTTP协议类似。 RTSP被用于建立的控制媒体流的传输,它为多媒体服务扮演“网络远程控制”的角色。
1625 0
|
缓存 网络协议 算法
|
网络协议 流计算 数据安全/隐私保护
rtsp和sdp协议简介
RTSP是由Real network 和Netscape共同提出的如何有效地在IP网络上传输流媒体数据的应用层协议。 实时流协议(RTSP)建立并控制一个或几个时间同步的连续流媒体,如音频和视频。尽管连续媒体流与控制流交叉是可能的,RTSP 本身并不发送连续媒体流。
2353 0
|
Linux C# C++
常用应用层协议HTTP、RTSP、RTMP比较
HTTP(超文本传输协议)、RTSP(Real Time Streaming Protocol实时流传输协议)、RTMP(Routing Table Maintenance Protocol路由选择表维护协议)是应用层协议,理论上都可以做直播、点播,实际上直播多采用RTMP和RTSP、点播则多用RTSP和HTTP。
2297 0
|
网络协议 安全 网络安全
rtsp协议详解
格式为:a=rtpmap:<净荷类型><编码名称> * 净荷类型0固定分配给了PCMU, * 净荷类型96对应的编码方案为G.726,为动态分配的。 * 净荷类型97对应的编码方式为自适应多速率宽带编码(AMR-WB),为动态分配的
2524 0
|
移动开发 网络协议 Java
RTSP协议详解
RTSP简介     RTSP(Real Time Streaming Protocol)是由Real Network和Netscape共同提出的如何有效地在IP网络上传输流媒体数据的应用层协议。
3664 0
|
编解码 应用服务中间件 nginx
RTSP协议转换RTMP直播协议
RTSP协议转换RTMP直播协议
586 1
|
网络协议 网络性能优化 流计算
RTSP协议、RTMP协议、HTTP协议的区别
理论上RTSP RTMPHTTP都可以做直播和点播,但一般做直播用RTSP RTMP,做点播用HTTP。做视频会议的时候原来用SIP协议,现在基本上被RTMP协议取代了。 RTSP、 RTMP、HTTP的共同点、区别 共同点: 1:RTSP RTMP HTTP都是在应用应用层。
3242 0
|
网络协议 网络安全 流计算
【流媒体】RTMP、RTSP、HLS、HTTP协议的介绍与对比
【流媒体】RTMP、RTSP、HLS、HTTP协议的介绍与对比
492 0

热门文章

最新文章