2013-04-05 43 views
7

Đối với ứng dụng của tôi, tôi phải truyền từ thẻ decklink đến ứng dụng Android (tôi phải là luồng trực tiếp, vì vậy HLS hoặc RTSP có vẻ là giải pháp tốt, vì ứng dụng của tôi nhắm mục tiêu Android 3+). Tôi biên dịch lại VLC với sdk decklink, và tôi có thể phát trực tiếp tới một máy tính khác qua mạng (nhưng nó chỉ hoạt động 60 giây với RTSP).Dòng phát trực tiếp VLC RTSP cho Android

Đây là những gì tôi đã cố gắng:

  • HTTP Suối:

    ./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}' 
    

Nó đang làm việc trong Android VLC 0.0.11, nhưng chỉ trong WiFi, không 3G. Và tôi không thể phát trong ứng dụng của mình bằng VideoView. Đây là mã tôi đã sử dụng và các thông báo lỗi tương ứng:

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(); 

Lỗi thông điệp:

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:

tôi đã sử dụng các tùy chọn mã hóa khuyến cáo của Google trên this page, ví dụ:

    bộ giải mã 10
  • video: h264
  • audio codec: AAC
  • bitrate video: 56
  • bitrate âm thanh: 24
  • kênh âm thanh: 1
  • kích thước: 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}' 
    

Tôi có thể phát luồng trong máy tính để bàn VLC, nhưng không có trong Android (ngay cả trong phiên bản VLC Android hoặc mặc định Goo Trình phát video gle: /). Nếu tôi không chỉ định một muxer, tôi cũng có thể chơi nó QuickTime (nếu tôi chỉ định muxer, hoặc ts hoặc ps, tôi không có video. Nếu tôi thử một muxer, VLC nói với tôi rằng tôi chỉ được phép sử dụng ts hoặc ps trong RTP)

Nếu tôi cố gắng với trình phát video của Google, tôi nhận được những tin nhắn trong 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 

tôi đoán vấn đề là chỉ với "trạng thái: RTSP/1.0 461 không được hỗ trợ vận chuyển ", nhưng tôi không thấy những gì tôi có thể thay đổi: Tôi đã mở các cổng tôi sử dụng và tôi nhận được video trên một máy tính khác.

Trên điện thoại Android, tôi có thể phát một số luồng rtsp mà tôi tìm thấy trên web, ví dụ: dòng này: rtsp: //184.72.239.149/vod/mp4: BigBuckBunny_115k.mov. Vì vậy, nó sẽ là có thể.

Nếu có ai có thể giúp ...!

+0

Sự cố của bạn đã được giải quyết chưa ?? –

+0

Tôi cũng muốn phát triển một ứng dụng hiển thị phát trực tiếp của camera IP. Tôi đã xác thực RSTP url mà videoview của android không hỗ trợ. tôi cũng muốn ghi lại RSTP ... bạn có thể hướng dẫn tôi cách đạt được các chức năng như vậy không? –

Trả lời

6

Cuối cùng, đó là sự cố mạng, tôi đang kết nối thiết bị của mình thông qua chia sẻ WiFi trên MacBook và có vẻ như nó đã chặn luồng RTSP. Bây giờ tôi đang sử dụng một bộ định tuyến và nó hoạt động trong RTSP (tôi vẫn không thể nhận được một luồng HTTP trong Android VideoView). Tuy nhiên, tôi vẫn gặp sự cố hết thời gian chờ: luồng RTSP dừng sau 60 giây, vì VideoView không gửi các tin nhắn còn sống. Tôi sẽ cố gắng tự làm ...

+0

Vì vậy, thông báo lỗi: trạng thái: RTSP/1.0 461 Giao thông không được hỗ trợ thực sự có nghĩa là sự cố mạng của nó? – Robert

0

Tôi đã kiểm tra máy chủ rtsp của mình bằng lệnh openRTSP.

Đó là các cổng UDP đã bị chặn.

Nếu truy cập rtsp mà không -t:

-> $ openRTSP <rtsp_url> 

tôi đã log nói với tôi:

// 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 

Vì vậy, thay đổi để TCP với:

-> $ openRTSP -t <rtsp_url> 

nó bắt đầu nhận dữ liệu thành công.

// 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.

Bây giờ tôi đã có để tìm ra công tắc làm thế nào để tự động để TCP trong Android.

0

hãy thử các VLC:

vlc some_file.mp4 -Tôi http --sout "#transcode {soverlay, ab = 128, samplerate = 44100, kênh = 2, acodec = mp4a, vcodec = h264, chiều rộng = 480, chiều cao = 270, vfilter = "canvas {width = 480, height = 270, aspect = 16: 9}", fps = 25, vb = 800, venc = x264 {mức = 12, không có cabac, subme = 20, chủ đề = 4, bframes = 0, min-keyint = 1, keyint = 50}}: thu thập: rtp {mp4a-latm, sdp = rtsp: //0.0.0.0: 5554/stream.sdp} "

và mã 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(); 
     } 
Các vấn đề liên quan