之前一直使用live555作為RTSP的客戶端,但其框架臃腫,雖然支持各種格式,但實際中並沒有這些需求,關鍵是其注重於格式的解析,卻不注重網絡IO,單線程下性能也不高,重新用libevent編寫rtspclient,目前支持海康攝像頭測試沒有問題。
先通過libevent將所有的IO輸入進行隊列管理,再由回調函數來進行所有輸入輸出的處理,包括connect在內都采用無阻塞的方式運行。
目錄下共有三個文件 net/ util/ makefile.pub
先在util目錄下make
然后在net 目錄下make ,目錄下會生成test_rtsp_test的測試文件,編譯時需要自己編譯下載libevent庫,並在編譯時指定。
rtsp測試客戶端位於test目錄下,需要自己填寫正確的rtsp地址以及密碼。
測試效果如下:
源代碼地址:git@github.com:hpwang666/rtspclient.git
< 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的包,要注意網絡分片需要將其重新拼包。
源代碼地址:git@github.com:hpwang666/rtspclient.git