2013-04-05 12 views
7

Do mojej aplikacji muszę przesyłać strumieniowo z karty decklink do aplikacji na Androida (muszę być transmisją na żywo, więc albo HLS, albo RTSP wydaje się być dobrym rozwiązaniem, ponieważ moja aplikacja jest przeznaczona dla Androida 3+). Przekompilowałem VLC z decklejem SDK i mogę transmitować na żywo do innego komputera przez sieć (ale działa tylko 60 sekund z RTSP).VLC RTSP transmisja na żywo do Androida

Oto, co starałem: Stream

  • HTTP:

    ./vlc -vvv decklink:// --sout 
    '#transcode{vcodec=mp4v,acodec=mpga,vb=56,ab=24,channels=1} 
    :standard{access=http{use-key-frames},mux=ts,dst=:3001/stream.mpeg}' 
    

To działa w Android VLC 0.0.11, ale tylko w WiFi, a nie w 3G. I nie mogę odtwarzać tego w mojej aplikacji z VideoView. Oto kod użyłem i odpowiednie komunikaty o błędach:

String url = "http://134.246.63.169:5554/stream.mpeg"; 

VideoView videoView = (VideoView) this.findViewById(R.id.videoView); 
videoView.setVideoURI(Uri.parse(url));   
videoView.setMediaController(new MediaController(this)); 
videoView.requestFocus(); 
videoView.start(); 

komunikaty o błędach:

04-08 15:26:46.272: D/MediaPlayer(16349): Couldn't open file on client side, trying server side 
04-08 15:26:46.272: V/ChromiumHTTPDataSource(7680): connect on behalf of uid 1080867789 
04-08 15:26:46.272: I/ChromiumHTTPDataSource(7680): connect to http://134.246.63.169:8554/ @0 
04-08 15:26:46.302: I/AwesomePlayer(7680): AwesomePlayer::AwesomePlayer()in 
04-08 15:26:46.302: I/AwesomePlayer(7680): AwesomePlayer::AwesomePlayer()aftermClient.connect() 
04-08 15:26:46.302: I/AwesomePlayer(7680): setDataSource_l('http://134.246.63.169:5554/') 
04-08 15:26:46.302: W/MediaPlayer(16349): info/warning (701, 0) 
04-08 15:26:46.302: V/ChromiumHTTPDataSource(7680): connect on behalf of uid 10067 
04-08 15:26:46.302: I/ChromiumHTTPDataSource(7680): connect to http://134.246.63.169:5554/ @0 
04-08 15:26:46.342: I/ActivityManager(272): Displayed fr.ifremer.testrtsp/.MainActivity: +183ms 
04-08 15:26:46.382: I/MediaPlayer(16349): Info (701,0) 
04-08 15:27:07.592: E/MediaPlayer(16349): error (1, -2147483648) 
04-08 15:27:07.592: E/MediaPlayer(16349): Error (1,-2147483648) 
  • RTSP:

użyłem opcji kodowania zalecanych przez Google na this page, np .:

    Koder-dekoder 10
  • wideo: H264
  • kodek audio: AAC
  • szybkość transmisji wideo: 56
  • przepływność audio: 24
  • kanałów audio: 1
  • rozmiar 176x144

    ./vlc -vvv decklink:// --sout-ffmpeg-strict=-2 --sout 
    '#transcode{width=176,height=144,vcodec=h264,acodec=mp4a,vb=56,ab=24,channels=1} 
    :rtp{dst=134.246.63.169,port-video=5554,port-audio=5556,sdp=rtsp://134.246.63.169:5554/stream.sdp}' 
    

Jestem w stanie odtwarzać strumień na pulpicie VLC, ale nie na Androidzie (nawet w wersji Android VLC lub domyślnej wersji Goo gle odtwarzacz wideo: /). Jeśli nie określiłem muxer, mogę również odtwarzać go w QuickTime (jeśli podam muxer, ts lub ps, nie mam wideo.) Jeśli spróbuję innego muxera, VLC mówi mi, że mogę używać tylko TS lub PS w RTP)

Gdy próbuję z odtwarzacza wideo Google, mam te wiadomości w Locat:

04-08 15:32:45.792: D/MediaPlayer(13688): Couldn't open file on client side, trying server side 
04-08 15:32:45.802: W/MediaPlayer(13688): info/warning (701, 0) 
04-08 15:32:45.812: I/MediaPlayer(13688): Info (701,0) 
04-08 15:32:45.812: D/MediaPlayer(13688): getMetadata 
04-08 15:32:45.812: E/MediaPlayerService(7680): getMetadata failed -38 
04-08 15:32:45.852: I/MyHandler(7680): connection request completed with result 0 (Success) 
04-08 15:32:45.882: I/ARTSPConnection(7680): status: RTSP/1.0 200 OK 
04-08 15:32:45.882: I/MyHandler(7680): DESCRIBE completed with result 0 (Success) 
04-08 15:32:45.882: I/ASessionDescription(7680): v=0 
04-08 15:32:45.882: I/ASessionDescription(7680): o=- 15352003113363922923 15352003113363922923 IN IP4 to63-169.ifremer.fr 
04-08 15:32:45.882: I/ASessionDescription(7680): s=Unnamed 
04-08 15:32:45.882: I/ASessionDescription(7680): i=N/A 
04-08 15:32:45.882: I/ASessionDescription(7680): c=IN IP4 134.246.63.169 
04-08 15:32:45.882: I/ASessionDescription(7680): t=0 0 
04-08 15:32:45.882: I/ASessionDescription(7680): a=tool:vlc 2.0.5 
04-08 15:32:45.882: I/ASessionDescription(7680): a=recvonly 
04-08 15:32:45.882: I/ASessionDescription(7680): a=type:broadcast 
04-08 15:32:45.882: I/ASessionDescription(7680): a=charset:UTF-8 
04-08 15:32:45.882: I/ASessionDescription(7680): a=control:rtsp://134.246.63.169:5554/stream.sdp 
04-08 15:32:45.882: I/ASessionDescription(7680): m=audio 5556 RTP/AVP 96 
04-08 15:32:45.882: I/ASessionDescription(7680): b=AS:24 
04-08 15:32:45.882: I/ASessionDescription(7680): b=RR:0 
04-08 15:32:45.882: I/ASessionDescription(7680): a=rtpmap:96 mpeg4-generic/48000 
04-08 15:32:45.882: I/ASessionDescription(7680): a=fmtp:96 streamtype=5; profile-level-id=15; mode=AAC-hbr; config=118856e500; SizeLength=13; IndexLength=3; IndexDeltaLength=3; Profile=1; 
04-08 15:32:45.882: I/ASessionDescription(7680): a=control:rtsp://134.246.63.169:5554/stream.sdp/trackID=0 
04-08 15:32:45.882: I/ASessionDescription(7680): m=video 5554 RTP/AVP 96 
04-08 15:32:45.882: I/ASessionDescription(7680): b=AS:56 
04-08 15:32:45.882: I/ASessionDescription(7680): b=RR:0 
04-08 15:32:45.882: I/ASessionDescription(7680): a=rtpmap:96 H264/90000 
04-08 15:32:45.882: I/ASessionDescription(7680): a=fmtp:96 packetization-mode=1;profile-level-id=64000b;sprop-parameter-sets=Z2QAC6zZQsTv/AC0ALBAAAADAEAAAAyjxQplgA==,aOvssiw=; 
04-08 15:32:45.882: I/ASessionDescription(7680): a=control:rtsp://134.246.63.169:5554/stream.sdp/trackID=1 
04-08 15:32:45.982: I/ARTSPConnection(7680): status: RTSP/1.0 200 OK 
04-08 15:32:45.982: I/MyHandler(7680): SETUP(1) completed with result 0 (Success) 
04-08 15:32:45.982: I/MyHandler(7680): server specified timeout of 60 secs. 
04-08 15:32:45.992: W/MyHandler(7680): Missing 'source' field in Transport response. Using RTSP endpoint address. 
04-08 15:32:45.992: I/APacketSource(7680): dimensions 176x144 
04-08 15:32:46.012: I/ARTSPConnection(7680): status: RTSP/1.0 200 OK 
04-08 15:32:46.022: I/MyHandler(7680): SETUP(2) completed with result 0 (Success) 
04-08 15:32:46.022: I/MyHandler(7680): server specified timeout of 60 secs. 
04-08 15:32:46.022: W/MyHandler(7680): Missing 'source' field in Transport response. Using RTSP endpoint address. 
04-08 15:32:46.022: W/MyHandler(7680): Server picked an odd RTP port, it should've picked an even one, we'll let it pass for now, but this may break in the future. 
04-08 15:32:46.082: I/ARTSPConnection(7680): status: RTSP/1.0 200 OK 
04-08 15:32:46.082: D/dalvikvm(13688): GC_FOR_ALLOC freed 303K, 7% free 9289K/9927K, paused 35ms, total 36ms 
04-08 15:32:46.092: I/MyHandler(7680): PLAY completed with result 0 (Success) 
04-08 15:32:46.092: I/MyHandler(7680): This is a live stream 
04-08 15:32:48.262: D/AudioHardware(7680): AudioHardware pcm playback is going to standby. 
04-08 15:32:48.262: D/AudioHardware(7680): closePcmOut_l() mPcmOpenCnt: 1 
04-08 15:32:56.092: W/MyHandler(7680): Never received any data, switching transports. 
04-08 15:32:56.112: I/ARTSPConnection(7680): status: RTSP/1.0 200 OK 
04-08 15:32:56.122: I/MyHandler(7680): TEARDOWN completed with result 0 (Success) 
04-08 15:32:56.122: I/MyHandler(7680): connection request completed with result 0 (Success) 
04-08 15:32:56.152: I/ARTSPConnection(7680): status: RTSP/1.0 200 OK 
04-08 15:32:56.152: I/MyHandler(7680): DESCRIBE completed with result 0 (Success) 
04-08 15:32:56.152: I/ASessionDescription(7680): v=0 
04-08 15:32:56.152: I/ASessionDescription(7680): o=- 15352003157473632156 15352003157473632156 IN IP4 to63-169.ifremer.fr 
04-08 15:32:56.152: I/ASessionDescription(7680): s=Unnamed 
04-08 15:32:56.152: I/ASessionDescription(7680): i=N/A 
04-08 15:32:56.152: I/ASessionDescription(7680): c=IN IP4 134.246.63.169 
04-08 15:32:56.152: I/ASessionDescription(7680): t=0 0 
04-08 15:32:56.152: I/ASessionDescription(7680): a=tool:vlc 2.0.5 
04-08 15:32:56.152: I/ASessionDescription(7680): a=recvonly 
04-08 15:32:56.152: I/ASessionDescription(7680): a=type:broadcast 
04-08 15:32:56.152: I/ASessionDescription(7680): a=charset:UTF-8 
04-08 15:32:56.152: I/ASessionDescription(7680): a=control:rtsp://134.246.63.169:5554/stream.sdp 
04-08 15:32:56.152: I/ASessionDescription(7680): m=audio 5556 RTP/AVP 96 
04-08 15:32:56.152: I/ASessionDescription(7680): b=AS:24 
04-08 15:32:56.152: I/ASessionDescription(7680): b=RR:0 
04-08 15:32:56.152: I/ASessionDescription(7680): a=rtpmap:96 mpeg4-generic/48000 
04-08 15:32:56.152: I/ASessionDescription(7680): a=fmtp:96 streamtype=5; profile-level-id=15; mode=AAC-hbr; config=118856e500; SizeLength=13; IndexLength=3; IndexDeltaLength=3; Profile=1; 
04-08 15:32:56.152: I/ASessionDescription(7680): a=control:rtsp://134.246.63.169:5554/stream.sdp/trackID=0 
04-08 15:32:56.152: I/ASessionDescription(7680): m=video 5554 RTP/AVP 96 
04-08 15:32:56.152: I/ASessionDescription(7680): b=AS:56 
04-08 15:32:56.152: I/ASessionDescription(7680): b=RR:0 
04-08 15:32:56.152: I/ASessionDescription(7680): a=rtpmap:96 H264/90000 
04-08 15:32:56.152: I/ASessionDescription(7680): a=fmtp:96 packetization-mode=1;profile-level-id=64000b;sprop-parameter-sets=Z2QAC6zZQsTv/AC0ALBAAAADAEAAAAyjxQplgA==,aOvssiw=; 
04-08 15:32:56.152: I/ASessionDescription(7680): a=control:rtsp://134.246.63.169:5554/stream.sdp/trackID=1 
04-08 15:32:56.222: I/ARTSPConnection(7680): status: RTSP/1.0 461 Unsupported transport 
04-08 15:32:56.222: I/MyHandler(7680): SETUP(1) completed with result 0 (Success) 
04-08 15:32:56.222: I/APacketSource(7680): dimensions 176x144 
04-08 15:32:56.242: I/ARTSPConnection(7680): status: RTSP/1.0 461 Unsupported transport 
04-08 15:32:56.252: I/MyHandler(7680): SETUP(2) completed with result 0 (Success) 
04-08 15:32:56.272: E/MediaPlayer(13688): error (1, -2147483648) 
04-08 15:32:56.272: E/MediaPlayer(13688): Error (1,-2147483648) 
04-08 15:32:56.272: D/VideoView(13688): Error: 1,-2147483648 

Myślę, że problem jest wskazał na „status: RTSP/1,0 461 nieobsługiwanych transport ", ale nie widzę, co mogę zmienić: już otwierać porty, których używam, i odbieram wideo na innym komputerze.

Na telefonie z Androidem mogę odtwarzać niektóre strumienie rtsp, które znalazłem w Internecie, na przykład: rtsp: //184.72.239.149/vod/mp4: BigBuckBunny_115k.mov. Tak powinno być możliwe.

Jeśli ktokolwiek może pomóc ...!

+0

Czy problem został rozwiązany? –

+0

Chcę również stworzyć aplikację, która pokazuje transmisję na żywo z kamery IP. Uwierzytelniłem URL RSTP, którego wideo nie obsługuje Android. Chcę również nagrywać RSTP ... czy możesz mi doradzić, jak osiągnąć taką funkcjonalność? –

Odpowiedz

6

W końcu to był problem z siecią, podłączałem moje urządzenia przez udostępnianie WiFi w MacBooku i wygląda na to, że zablokował strumień RTSP. Teraz używam routera i działa on w RTSP (nadal nie mogę odbierać strumienia HTTP w Android VideoView). Mimo to, nadal mam problem z limitem czasu: Strumień RTSP zatrzymuje się po 60 sekundach, ponieważ VideoView nie wysyła wiadomości podtrzymujących. Spróbuję zrobić to sam ...

+0

Więc błąd msg: status: RTSP/1.0 461 Nieobsługiwany transport naprawdę oznacza, że ​​jest to problem z siecią? – Robert

0

Przetestowałem mój serwer rtsp za pomocą polecenia openRTSP.

To porty UDP zostały zablokowane.

Jeżeli dostępu RTSP bez -t:

-> $ openRTSP <rtsp_url> 

Mam dziennik mówiąc mi:

// omit lots of lines.. 
Created receiver for "video/H264" subsession (client ports 63346-63347) 
Sending request: SETUP rtsp://61.218.52.250:554/live/ch00_0/trackID=0 RTSP/1.0 
CSeq: 4 
User-Agent: openRTSP (LIVE555 Streaming Media v2013.12.16) 
Transport: RTP/AVP;unicast;client_port=63346-63347 

Received 47 new bytes of response data. 
Received a complete SETUP response: 
RTSP/1.0 461 Unsupported Transport 
CSeq: 4 

Failed to setup "video/H264" subsession: 461 Unsupported Transport 

więc zmiana na TCP z:

-> $ openRTSP -t <rtsp_url> 

rozpocząć odbieranie danych z powodzeniem.

// omit lots of lines.. 
Opened URL "rtsp://61.218.52.250:554/live/ch00_0", returning a SDP description: 
v=0 
o=- 1 1 IN IP4 127.0.0.1 
s=Ubiquiti Live 
i=UBNT Streaming Media 
c=IN IP4 0.0.0.0 
t=0 0 
m=video 0 RTP/AVP 99 
b=AS:50000 
a=framerate:25 
a=x-dimensions:1280,720 
a=x-vendor-id:ubnt,a521 
a=x-rtp-ts:4617405454576779984 
a=rtpmap:99 H264/90000 
a=fmtp:99 profile-level-id=42A01E;packetization-mode=1;sprop-parameter-sets=Z0IAKOkAoAt1xIAG3dAAzf5gDYgQlA==,aM4xUg== 
a=control:trackID=0 

Sending request: SETUP rtsp://61.218.52.250:554/live/ch00_0/trackID=0 RTSP/1.0 
CSeq: 4 
User-Agent: openRTSP (LIVE555 Streaming Media v2013.12.16) 
Transport: RTP/AVP/TCP;unicast;interleaved=0-1 


Received 107 new bytes of response data. 
Received a complete SETUP response: 
RTSP/1.0 200 OK 
CSeq: 4 
Transport: RTP/AVP/TCP;unicast;interleaved=0-1 
Session: E090B5503236A1BFB7CE 


Setup "video/H264" subsession (client ports 54884-54885) 
Sending request: PLAY rtsp://61.218.52.250:554/live/ch00_0/ RTSP/1.0 
CSeq: 5 
User-Agent: openRTSP (LIVE555 Streaming Media v2013.12.16) 
Session: E090B5503236A1BFB7CE 
Range: npt=0.000- 


Received 159 new bytes of response data. 
Received a complete PLAY response: 
RTSP/1.0 200 OK 
CSeq: 5 
Session: E090B5503236A1BFB7CE 
Range: npt=now- 
RTP-Info: url=rtsp://61.218.52.250:554/live/ch00_0//trackID=0;seq=41402;rtptime=0 


Started playing session 
Data is being streamed (signal with "kill -HUP 96432" or "kill -USR1 96432" to terminate)... 
Received 47 new bytes of response data. 
Received 1424 new bytes of response data. 
Received 1424 new bytes of response data. 
Received 1424 new bytes of response data. 
Received 1424 new bytes of response data. 
Received 1448 new bytes of response data. 
Received 1448 new bytes of response data. 

Ref to openRTSP basics.

Teraz muszę dowiedzieć się, w jaki sposób automatyczny przełącznik TCP w Androidzie.

0

spróbuj VLC:

vlc some_file.mp4 -I http --sout „#transcode {soverlay AB = 128, próbkowania = 44100, kanały = 2, acodec = mp4a, vcodec = h264, szerokość = 480, wysokość = 270, vfilter = "płótno {szerokość = 480, wysokość = 270, aspekt = 16: 9}", fps = 25, vb = 800, venc = x264 {poziom = 12, no-cabac, subme = 20, wątki = 4, bframes = 0, min-keyint = 1, keyint = 50}}: gather: rtp {mp4a-latm, sdp = rtsp: //0.0.0.0: 5554/stream.sdp} "

a kod android:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     final VideoView vidView = (VideoView)findViewById(R.id.myVideo); 

     MediaController vidControl = new MediaController(this); 
     vidControl.setAnchorView(vidView); 
     vidView.setMediaController(vidControl); 

     vidView.setVideoPath("rtsp://137.110.92.231:5554/stream.sdp"); 

     vidView.start(); 
     } 
Powiązane problemy