对于我的应用程序,我必须从甲板连接卡流到Android应用程序(我必须是一个实时流,所以HLS或RTSP似乎是很好的解决方案,因为我的应用程序的目标是Android 3+ )。我使用decklink sdk重新编译了VLC,并且能够通过网络直播到另一台电脑(但它仅与RTSP一起工作60秒)。VLC RTSP直播到Android
这里是我的尝试:
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}'
它是工作在Android的VLC 0.0.11,但只有在无线网络,而不是3G。而且我无法使用VideoView在我的应用中播放它。这里是我使用的代码和对应的错误消息:
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();
错误消息:
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:
我用this page由谷歌建议的编码选项,例如:
- 视频编解码器:H264
- 音频编解码器:AAC
- 视频比特率:56
- 音频比特率:24个
- 音频通道:1
尺寸:176×144
./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}'
我能够在VLC桌面播放流,但不能在Android中播放(即使在Android VLC版本或默认的Goo中gle视频播放器:/)。 如果我没有指定muxer,我也可以用它来播放QuickTime(如果我指定muxer,无论是ts还是ps,我都没有视频,如果我尝试另一个muxer,VLC告诉我,我只允许使用TS或RTP PS)
如果我尝试用谷歌视频播放器,我得到的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
我想这个问题被指出与“状态:RTSP/1.0 461不支持运输“,但我看不到我可以改变什么:我已经打开了我使用的端口,而且我确实收到了另一台计算机上的视频。
在Android手机上,我可以播放一些我在网上找到的rtsp流,例如:rtsp://184.72.239.149/vod/mp4:BigBuckBunny_115k.mov。 所以它应该是可能的。
如果有人能帮助...!
问题是否解决? – 2013-05-27 12:55:58
我也想开发一个显示IP摄像机直播的应用程序。我已经验证了android的videoview不支持的RSTP url。我也想记录RSTP ...你能指导我如何实现这样的功能吗? – 2013-05-27 12:57:12