2012-04-25 37 views
2

私はRTSPサーバを書いて、いくつかの問題を持っているんだ。 私はクライアントとしてVLCを使用しています。RTSPサーバJava実装の問題:(

Serverは(VLCプレーヤー)クライアントからOPTIONS、DESCRIBE、SETUPおよびPLAYコマンドを受信そのコマンドに答えます

SETUPコマンドでクライアントがポート番号を送信し、そのポートを使用してデータを送信しています 私のサーバーがPLAYコマンドを受信すると、応答を送信してデータをストリームし始めます。クライアントポートを持つDatagramSocketインスタンス

私はmp4をストリームしようとしていますファイル。 mp4parse javaライブラリを使用して、オーディオとビデオのデータをストリーム配信します。

ので

、私はVLCで再生をクリックしたとき、いくつかの秒後、私はVLCのメッセージに、このメッセージを持って、接続してデータを待って始めている:ここで

live555 warning: no data received in 10s. Switching to TCP 

は私のSDPデータである:

v=0 
o=- 0 0 IN IP4 127.0.0.1 
m=video 0 RTP/AVP 96 
b=AS:1633 
a=rtpmap:96 H264/90000 
a=control:trackID=65536 
a=fmtp:96 profile-level-id=64001F; packetization-mode=1; sprop-parameter-sets=Z2QAH6zZgFAFuhAAAAMAEAAAAwMg8YMZoA==,aOl7LIs= 
a=framesize:96 1280-720 
m=audio 0 RTP/AVP 97 
b=AS:129 
a=rtpmap:97 mpeg4-generic/48000/2 
a=control:trackID=65537 
a=fmtp:97 profile-level-id=41; config=1190; streamType=5; mode=AAC-hbr; objectType=64; constantDuration=1024; sizeLength=13; indexLength=3; indexDeltaLength=3 

また、私はを使用してRTPパケットを作成して送信しています。

+++++++CLIENT+S++++++++++ 
OPTIONS rtsp://127.0.0.1:4444/aaa RTSP/1.0 
CSeq: 2 
User-Agent: LibVLC/2.0.1 (LIVE555 Streaming Media v2011.12.23) 
+++++++CLIENT+E++++++++++ 
+++++++SERVER+S++++++++++ 
RTSP/1.0 200 OK 
CSeq: 2 
Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE 

+++++++SERVER+E++++++++++ 
+++++++CLIENT+S++++++++++ 
DESCRIBE rtsp://127.0.0.1:4444/aaa RTSP/1.0 
CSeq: 3 
User-Agent: LibVLC/2.0.1 (LIVE555 Streaming Media v2011.12.23) 
Accept: application/sdp 
+++++++CLIENT+E++++++++++ 
+++++++SERVER+S++++++++++ 
RTSP/1.0 200 OK 
CSeq: 3 
Content-Type: application/sdp 

v=0 
o=- 0 0 IN IP4 127.0.0.1 
m=video 0 RTP/AVP 96 
b=AS:1633 
a=rtpmap:96 H264/90000 
a=control:trackID=65536 
a=fmtp:96 profile-level-id=64001F; packetization-mode=1; sprop-parameter-sets=Z2QAH6zZgFAFuhAAAAMAEAAAAwMg8YMZoA==,aOl7LIs= 
a=framesize:96 1280-720 
m=audio 0 RTP/AVP 97 
b=AS:129 
a=rtpmap:97 mpeg4-generic/48000/2 
a=control:trackID=65537 
a=fmtp:97 profile-level-id=41; config=1190; streamType=5; mode=AAC-hbr; objectType=64; constantDuration=1024; sizeLength=13; indexLength=3; indexDeltaLength=3 

+++++++SERVER+E++++++++++ 
+++++++CLIENT+S++++++++++ 
SETUP rtsp://127.0.0.1:4444/aaa/trackID=65536 RTSP/1.0 
CSeq: 4 
User-Agent: LibVLC/2.0.1 (LIVE555 Streaming Media v2011.12.23) 
Transport: RTP/AVP;unicast;client_port=59298-59299 
+++++++CLIENT+E++++++++++ 
+++++++SERVER+S++++++++++ 
RTSP/1.0 200 OK 
CSeq: 4 
Transport: RTP/AVP;unicast;client_port=59298-59299 
Session: 00007689 

+++++++SERVER+E++++++++++ 
+++++++CLIENT+S++++++++++ 
SETUP rtsp://127.0.0.1:4444/aaa/trackID=65537 RTSP/1.0 
CSeq: 5 
User-Agent: LibVLC/2.0.1 (LIVE555 Streaming Media v2011.12.23) 
Transport: RTP/AVP;unicast;client_port=62520-62521 
Session: 00007689 
+++++++CLIENT+E++++++++++ 
+++++++SERVER+S++++++++++ 
RTSP/1.0 200 OK 
CSeq: 5 
Transport: RTP/AVP;unicast;client_port=62520-62521 
Session: 00007689 

+++++++SERVER+E++++++++++ 
+++++++CLIENT+S++++++++++ 
PLAY rtsp://127.0.0.1:4444/aaa RTSP/1.0 
CSeq: 6 
User-Agent: LibVLC/2.0.1 (LIVE555 Streaming Media v2011.12.23) 
Session: 00007689 
Range: npt=0.000- 
+++++++CLIENT+E++++++++++ 
+++++++SERVER+S++++++++++ 
RTSP/1.0 200 OK 
CSeq: 6 

+++++++SERVER+E++++++++++ 
Streaming... 
+++++++CLIENT+S++++++++++ 
TEARDOWN rtsp://127.0.0.1:4444/aaa RTSP/1.0 
CSeq: 7 
User-Agent: LibVLC/2.0.1 (LIVE555 Streaming Media v2011.12.23) 
Session: 00007689 
+++++++CLIENT+E++++++++++ 
+++++++SERVER+S++++++++++ 
RTSP/1.0 200 OK 
CSeq: 7 

+++++++SERVER+E++++++++++ 
Exception in thread "main" java.net.SocketException: Connection reset 
    at java.net.SocketInputStream.read(SocketInputStream.java:168) 
    at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264) 
    at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306) 
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158) 
    at java.io.InputStreamReader.read(InputStreamReader.java:167) 
    at java.io.BufferedReader.fill(BufferedReader.java:136) 
    at java.io.BufferedReader.readLine(BufferedReader.java:299) 
    at java.io.BufferedReader.readLine(BufferedReader.java:362) 
    at com.vtgsoftwares.ekiz.server.RTSPServer.<init>(RTSPServer.java:71) 
    at com.vtgsoftwares.ekiz.server.RTSPServer.main(RTSPServer.java:80) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) 

任意の考え:ここ

は、サーバ・クライアント通信ログのですか?

ありがとうございました。

+0

openrtspクライアントVardanは、それがクライアントにからデータを書き込んで失敗しているサーバーのコードのように見えます。いくつかのログステートメントを追加します。ここでは、サーバコードがデータをソケットに書き込んで、期待通りに動作しているかどうかを確認します。 –

答えて

1

のRTSP SETUP要求がクライアントによって送信された後、サーバーログにRTSPピアは、プロトコルの一部として「輸送」に同意する必要があります...

Received 360 new bytes of response data. 
Received a complete SETUP response: 
RTSP/1.0 200 OK 
Session: 70cd7f38;timeout=90 
Transport: RTP/AVP;unicast;mode=play;client_port=64498-64499;server_port=10580-10581;source=74.125.212.247;ssrc=50DF166F 

サーバーのログを表示する必要がありますRTCPのためのポート(C/S)のセットとプロトコルのデータ部分に同意するピア。

あなたのVLCクライアントは、データストリームがどこにあるのかわかりません。つまり、どのポートを待つべきか(読み込み可能なデータ)です。いくつかの成功したRTSPセッションから

ログ:

Play Youtube RTSP

VLC client Play RTSP stream

+0

お返事ありがとうございます。 VLCは 'live555警告:10秒間にデータを受信しませんでした。 TCPに切り替える。 ポートに関する1つの質問:データをクライアントポートに正しく送信する必要がありますか? また、jlibrtpを使用しているときにエラーが発生し、問題が何かを理解できませんでした。 今、私はそのjlibrtpを使用しないことを考えています。つまり、RTPパケットを手動で作成してクライアントポートに送信する必要があります。 私はRTPパケット構造について読んだことがありますが、実際にはJavaでそれを作成する方法を理解できませんでした。 私はそれに関する情報をどこから得ることができるのかを知っていますか? –

+0

自分で自分のrtspサーバーを作成しようとした理由を正確にはわかりませんか?あなたはオープンソースの実装(javaと思う)を探すかもし​​れない。 Wowzaは人々が使うものです(http://www.wowza.com/html/mobile.html)。 注:実際に複雑になるので、RTPパケットを作成するために独自のコードを実装するのに多くの時間を費やすことはお勧めしません。あなたがRTSPサーバーで多くの時間を費やして、雑草で時間がかかる場合、私は2つのことをお勧めします... –

+0

1. RPT/RTSP/SDP RFCのリストを読むのが好きです。http: //www.ietf.org/rfc/rfc2198.txt –