用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

扫描二维码关注公众号,回复: 11165175 查看本文章

猜你喜欢

转载自www.cnblogs.com/hpwang/p/12816816.html