[2457:961862] didConnectToHost, host: 192.168.0.102, port: 554 2016-08-10 13:41:02.697 RTSPClient[2457 :961862] didWriteDataWithTag: 0 2016-08-10 13:41:02.708 RTSPClient[2457:961874] didReadData: 0, RTSP/ [2457:961874] didWriteDataWithTag: 1 2016-08-10 13:41:02.728 RTSPClient[2457:961862] didReadData: 1, [2457:961862] didWriteDataWithTag: 2 2016-08-10 13:41:02.738 RTSPClient[2457:961862] didReadData: 2, [2457:961862] didWriteDataWithTag: 4 2016-08-10 13:41:02.748 RTSPClient[2457:961857] didReadData: 4,
最终我们选择了以live555作为摄像机RTSP接入的方案,能非常方便实现部分功能的定制,例如本文重点提到的OPTIONS发送的问题: 当我们采用RTP over UDP/TCP方式在取流的过程中,RTSPClient RTSPServer中noteliveness实现),服务器端长时间没有收到客户端发送的数据包,就会认为客户端连接是假连接,主动断开与客户端的连接(不管客户端是否正在取流); 所以,我们为了解决上述的问题,我们大部分的RTSPClient 有的也有可能发送的是GET_PARAMETER)命令,类似于保活报文,这样服务器端就能正常地发送直播数据流了; 然而,并不是所有的RTSPServer都做的那么好,就比如海康的某些IPC/NVR型号,当RTSPClient
他所使用的live555变量,这里ourRTSPClient实际就是RTSPClient的简单继承 ? 3.RtspCapture调用live555的主要流程 1. 在StartRtsp函数中,创建RtspClient,并发送"describe"命令,开始获取sdp。回调函数就是continueAfterDESCRIBE。
首先我们来看第一个项目,这个项目是rtspServer和rtspClient: 项目地址: https://github.com/fengweiyu/RTSP 因为readme里面有写如何运行工程,
EasyRTSPClient是一套简单、稳定、高效、易用的RTSPClient工具库,能够将各种网络IPCamera摄像机流进行拉取后经过自定义流程进行处理(转发 或者录像),支持Windows、Linux
[kqkv3vxy49.jpeg] 他所使用的live555变量,这里ourRTSPClient实际就是RTSPClient的简单继承 [j444dq0ntx.jpeg] 3.RtspCapture 在StartRtsp函数中,创建RtspClient,并发送"describe"命令,开始获取sdp。回调函数就是continueAfterDESCRIBE。
RTSPClient因其兼容性强,各种各样RTSP的兼容,各种各样的场景,大部分IPC的内置服务器都是基于live555的RTSPServer来二次开发实现的。
不过此处值得注意的是,并不是所有的RTSPServer都做的那么好,就比如海康的某些IPC/NVR型号,当RTSPClient在拉流的过程中,突然发送OPTIONS保活报文,就像是发送了一个垃圾数据一样
基于这些组件可以非常好地帮助您实现这些功能,但是这些组件都会存在不成熟或者不易使用的问题,EasyDarwin社区的开发者也实现了一系列此类功能的功能组件,例如: EasyRTSPClient:类似于live555的RTSPClient
SETUP:建立媒体传输通道 PLAY:开始播放媒体流 PAUSE:暂停播放 TEARDOWN:关闭媒体会话 3.1.2 RTSP客户端实现 import socket import re class RTSPClient
通用架构如下:RTSPClient ├── RTSP Parser ├── RTP/RTCP Handler ├── JitterBuffer ├── NALU Assembler