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);
}
目录
相关文章
|
27天前
|
存储 网络协议 网络安全
RTSP协议抓包及讲解(三)
RTSP协议抓包及讲解
17 1
|
11天前
|
存储 监控 网络协议
什么是RTSP
RTSP,即实时流传输协议,英文全称为Real-Time Streaming Protocol
17 0
|
27天前
|
存储 编解码 移动开发
RTSP协议抓包及讲解(一)
RTSP协议抓包及讲解
27 0
|
27天前
|
移动开发 网络协议 Windows
RTSP协议抓包及讲解(二)
RTSP协议抓包及讲解
29 1
|
27天前
|
编解码 网络协议 网络性能优化
RTP/RTCP 协议讲解
RTP/RTCP 协议讲解
53 0
|
6月前
|
网络协议 网络安全 流计算
【流媒体】RTMP、RTSP、HLS、HTTP协议的介绍与对比
【流媒体】RTMP、RTSP、HLS、HTTP协议的介绍与对比
205 0
|
3月前
|
编解码 网络协议 流计算
RTSP协议介绍
RTSP协议介绍
89 0
|
7月前
|
监控 网络协议
RTSP、RTMP、HTTP协议区别
HTTP将数据作为文件处理,所以HTTP不是流媒体协议,RTMP和RTSP是流媒体协议。 RTMP是Adobe的私有协议,未完全公开,RTSP和HTTP是共有协议。 RTMP一般传输flv,f4v格式流,RTSP传输ts,MP4格式流,HTTP没有特定的流。 RTSP一般需要2-3个通道,数据和命令通道分开,RTMP和HTTP在一个通道上传输命令和数据。
|
9月前
|
编解码 应用服务中间件 nginx
RTSP协议转换RTMP直播协议
RTSP协议转换RTMP直播协议
447 1
|
缓存 网络协议 算法