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);
}
目录
相关文章
|
6月前
|
存储 网络协议 网络安全
RTSP协议抓包及讲解(三)
RTSP协议抓包及讲解
99 1
|
6月前
|
移动开发 网络协议 Windows
RTSP协议抓包及讲解(二)
RTSP协议抓包及讲解
140 1
|
网络协议 网络安全 流计算
【流媒体】RTMP、RTSP、HLS、HTTP协议的介绍与对比
【流媒体】RTMP、RTSP、HLS、HTTP协议的介绍与对比
424 0
|
6月前
|
存储 编解码 移动开发
RTSP协议抓包及讲解(一)
RTSP协议抓包及讲解
183 0
|
6月前
|
编解码 网络协议 网络性能优化
RTP/RTCP 协议讲解
RTP/RTCP 协议讲解
306 0
|
6月前
|
编解码 网络协议 流计算
RTSP协议介绍
RTSP协议介绍
318 0
|
编解码 应用服务中间件 nginx
RTSP协议转换RTMP直播协议
RTSP协议转换RTMP直播协议
551 1
|
缓存 网络协议 算法
|
网络协议 网络性能优化 流计算
RTSP协议、RTMP协议、HTTP协议的区别
理论上RTSP RTMPHTTP都可以做直播和点播,但一般做直播用RTSP RTMP,做点播用HTTP。做视频会议的时候原来用SIP协议,现在基本上被RTMP协议取代了。 RTSP、 RTMP、HTTP的共同点、区别 共同点: 1:RTSP RTMP HTTP都是在应用应用层。
3192 0
RTSP服务器之————rtsp-server(轻量级RTSP / RTP流媒体服务器)
github:https://github.com/revmischa/rtsp-server 轻量级RTSP / RTP流媒体服务器
8668 0