用libevent写的海康摄像头rtsp客户端
之前一直使用live555作为RTSP的客户端,但其框架臃肿,虽然支持各种格式,但实际中并没有这些需求,关键是其注重于格式的解析,却不注重网络IO,单线程下性能也不高,重新用libevent编写rtspclient,目前支持海康摄像头测试没有问题。
先通过libevent将所有的IO输入进行队列管理,再由回调函数来进行所有输入输出的处理,包括connect在内都采用无阻塞的方式运行。
目录下共有三个文件 net/ util/ makefile.pub
先在util目录下make
然后在net 目录下make ,目录下会生成test_rtsp_test的测试文件,编译时需要自己编译下载libevent库,并在编译时指定。
rtsp测试客户端位于test目录下,需要自己填写正确的rtsp地址以及密码。
测试效果如下:
< OPTIONS rtsp://172.16.10.42/h264/ch1/main/av_stream RTSP/1.0 < CSeq: 1 < User-Agent: HPWANG_Net_Rtsp_Client < DESCRIBE rtsp://172.16.10.42/h264/ch1/main/av_stream RTSP/1.0 < CSeq: 2 < User-Agent: HPWANG_Net_Rtsp_Client < Accept: application/sdp > RTSP/1.0 200 OK > CSeq: 1 > Public: OPTIONS, DESCRIBE, PLAY, PAUSE, SETUP, TEARDOWN, SET_PARAMETER, GET_PARAMETER > Date: Sat, May 02 2020 09:22:33 GMT > RTSP/1.0 401 Unauthorized > CSeq: 2 > WWW-Authenticate: Digest realm="c42f90c4d6a7", nonce="cc638c6d39dc662f5444a95297c7b448", stale="FALSE" > WWW-Authenticate: Basic realm="c42f90c4d6a7" > Date: Sat, May 02 2020 09:22:33 GMT < DESCRIBE rtsp://172.16.10.42/h264/ch1/main/av_stream RTSP/1.0 < CSeq: 3 < Authorization: Digest username="admin", realm="c42f90c4d6a7", nonce="cc638c6d39dc662f5444a95297c7b448", uri="rtsp://172.16.10.42/h264/ch1/main/av_stream", response="90931e51ea13fb16a2d8ceb4d70cf52f" < User-Agent: HPWANG_Net_Rtsp_Client < Accept: application/sdp > RTSP/1.0 200 OK > CSeq: 3 > Content-Type: application/sdp > Content-Base: rtsp://172.16.10.42/h264/ch1/main/av_stream/ > Content-Length: 588 > v=0 > o=- 1588411353108714 1588411353108714 IN IP4 172.16.10.42 > s=Media Presentation > e=NONE > b=AS:5050 > t=0 0 > a=control:rtsp://172.16.10.42/h264/ch1/main/av_stream/ > m=video 0 RTP/AVP 96 > c=IN IP4 0.0.0.0 > b=AS:5000 > a=recvonly > a=x-dimensions:1280,720 > a=control:rtsp://172.16.10.42/h264/ch1/main/av_stream/trackID=1 > a=rtpmap:96 H264/90000 > a=fmtp:96 profile-level-id=420029; packetization-mode=1; sprop-parameter-sets=Z00AH5WoFAFuhAAAHCAABX5AEA==,aO48gA== > a=Media_header:MEDIAINFO=494D4B48010100000400010000000000000000000000000000000000000000000000000000000000; > a=appversion:1.0 < SETUP rtsp://172.16.10.42/h264/ch1/main/av_stream/trackID=1 RTSP/1.0 < CSeq: 4 < Authorization: Digest username="admin", realm="c42f90c4d6a7", nonce="cc638c6d39dc662f5444a95297c7b448", uri="rtsp://172.16.10.42/h264/ch1/main/av_stream/trackID=1", response="e4d1d85ddf55cbe0265b147ff01db724" < User-Agent: HPWANG_Net_Rtsp_Client < Transport: RTP/AVP/TCP;unicast;interleaved=0-1 > RTSP/1.0 200 OK > CSeq: 4 > Session: 280814098;timeout=60 > Transport: RTP/AVP/TCP;unicast;interleaved=0-1;ssrc=652f13b9;mode="play" > Date: Sat, May 02 2020 09:22:33 GMT < PLAY rtsp://172.16.10.42/h264/ch1/main/av_stream/ RTSP/1.0 < CSeq: 5 < Session: 280814098 < Authorization: Digest username="admin", realm="c42f90c4d6a7", nonce="cc638c6d39dc662f5444a95297c7b448", uri="rtsp://172.16.10.42/h264/ch1/main/av_stream/", response="85dd42ecf1c7056e1cf54b595586606b" < User-Agent: HPWANG_Net_Rtsp_Client < Range: npt=0.000- > RTSP/1.0 200 OK > CSeq: 5 > Session: 280814098 > RTP-Info: url=rtsp://172.16.10.42/h264/ch1/main/av_stream/trackID=1;seq=10268;rtptime=3312431238 > Date: Sat, May 02 2020 09:22:33 GMT ..................................................................................................................................
.......................................................................................................................................
........................................................................................................................................
.........................................................................................................................................
.....................
其中………表示一个rtp的包,要注意网络分片需要将其重新拼包。
源代码地址:[email protected]:hpwang666/rtspclient.git