ZLmediakit的RTSP流交互流程

以下流程包括接收RTSP推流,和ZLM作为代理拉流的流程

其中,接收推流中的TCP传输数据和UDP传输数据有一定的差异(红色是TCP数据传输。紫色是UDP数据传输);tcpserver是RTSP协议交互使用的

其中:UDP的(数据传输)socket是在RTSPsession中创建的,依据SETUP中的transport参数解析

TCP的(数据传输socket)与RTSP协商socket是同一个;但是与554端口监听的socket不是同一个:

  554端口监听socket是在tcpserver类中的 Socket::Ptr _socket;成员;代码如下

      

bool Socket::listen(uint16_t port, const string &local_ip, int backlog) {
    closeSock();
    int fd = SockUtil::listen(port, local_ip.data(), backlog); //fd=603
    if (fd == -1) {
        return false;
    }
    return fromSock_l(std::make_shared<SockNum>(fd, SockNum::Sock_TCP_Server));
}

       RTSP over tcp交互中的数据交互(和TCP协议交互,和UDP协议交互),使用的是新的socket;与端口监听使用的不是一个socket;

         

                Socket::Ptr peer_sock;  auto sock = std::make_shared<SockNum>(fd, SockNum::Sock_TCP);  //fd = 704

                 用这个理解会好一点:一个是监听fd,一个是链接fd; connect_fd =accept(listen_fd,(structsockaddr *)&peer_addr,&addr_len);

 

 

 

 

 

posted on 2024-06-17 18:06  邗影  阅读(218)  评论(0编辑  收藏  举报

导航