RTSP客户端的java实现

来源:互联网 发布:知乎专栏打不开 编辑:程序博客网 时间:2024/05/16 12:41

最近弄rtsp方面的东西,想找一个java实现的现成例子,翻遍网络,没有一个好用的,最后只好自己写一个。简单实现的思路是:首先建立一个tcp的连接,来建立rtsp的通道,然后依次按照rtsp协议发送options, describe, setup, play, pause, teardown命令,当然没有处理udp的数据部分,可以用darwin作代理来处理。代码如下:
NIO的socket事件接口:


比较简单的实现,最后程序的日志:
端口打开成功
OPTIONS rtsp://192.168.10.33:554 RTSP/1.0
Cseq: 1


返回内容:RTSP/1.0 200 OK
Server: DSS/5.5.4 (Build/489.13; Platform/Win32; Release/Darwin; )
Cseq: 1
Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, OPTIONS, ANNOUNCE, RECORD


option ok
DESCRIBE rtsp://192.168.10.33:554/live.sdp RTSP/1.0
Cseq: 2


返回内容:RTSP/1.0 200 OK
Server: DSS/5.5.4 (Build/489.13; Platform/Win32; Release/Darwin; )
Cseq: 2
Cache-Control: no-cache
Content-length: 376
Date: Tue, 22 Jan 2008 06:54:07 GMT
Expires: Tue, 22 Jan 2008 06:54:07 GMT
Content-Type: application/sdp
x-Accept-Retransmit: our-retransmit
x-Accept-Dynamic-Rate: 1
Content-Base: rtsp://192.168.10.33:554/live.sdp/

v=0
o=- 457979544 27 IN IP4 192.168.10.33
s=HelixSession
c=IN IP4 0.0.0.0
t=0 0
a=control:*
m=video 0 RTP/AVP 96
b=AS:20
a=rtpmap:96 MP4V-ES/90000
a=fmtp:96 profile-level-id=8; config=000001B008000001B50EA020202F000001000000012000C788BA9850584121463F
a=framesize:96 176-144
a=cliprect:0,0,144,176
a=mpeg4-esid:201
a=x-envivio-verid:00035A34
a=control:trackID=1

describe ok
SETUP rtsp://192.168.10.33:554/live.sdp/trackID=1
RTSP/1.0
Cseq: 3
Transport: RTP/AVP;UNICAST;client_port=16264-16265;mode=play


返回内容:RTSP/1.0 200 OK
Server: DSS/5.5.4 (Build/489.13; Platform/Win32; Release/Darwin; )
Cseq: 3
Cache-Control: no-cache
Session: 59725815223204
Date: Tue, 22 Jan 2008 06:54:09 GMT
Expires: Tue, 22 Jan 2008 06:54:09 GMT
Transport: RTP/AVP;UNICAST;mode=play;source=192.168.10.33;client_port=16264-16265;server_port=6970-6971


setup ok
PLAY rtsp://192.168.10.33:554/live.sdp RTSP/1.0
Session: 59725815223204
Cseq: 4


返回内容:RTSP/1.0 200 OK
Server: DSS/5.5.4 (Build/489.13; Platform/Win32; Release/Darwin; )
Cseq: 4
Session: 59725815223204
Range: npt=now-
RTP-Info: url=rtsp://192.168.10.33:554/live.sdp/trackID=1


play ok
PAUSE rtsp://192.168.10.33:554/live.sdp/ RTSP/1.0
Cseq: 5
Session: 59725815223204


返回内容:RTSP/1.0 200 OK
Server: DSS/5.5.4 (Build/489.13; Platform/Win32; Release/Darwin; )
Cseq: 5
Session: 59725815223204


pause ok
TEARDOWN rtsp://192.168.10.33:554/live.sdp/ RTSP/1.0
Cseq: 6
User-Agent: RealMedia Player HelixDNAClient/10.0.0.11279 (win32)
Session: 59725815223204


返回内容:RTSP/1.0 200 OK
Server: DSS/5.5.4 (Build/489.13; Platform/Win32; Release/Darwin; )
Cseq: 6
Session: 59725815223204
Connection: Close


teardown ok
端口关闭成功

用wireshark抓包的截屏:

抓包截屏