我的新监控摄像头刚到,所以我正在尝试编写一个应用程序来直播视频。
由于它基本上没有文档,我安装了'onvifer'android应用程序,它允许您浏览相机的功能。此应用程序工作正常 - 获取视频并允许PTZ控件等。它将流式网址报告为:
rtsp://192.1.0.193:554/mpeg4
我在VLC Windows客户端测试了流,它也可以从该URL流式传输视频。这让我觉得网络运行正常。
相机说明Feed为1920x1080; VLC证实了这一点。
我的活动中的基本代码:
VideoView videoView = (VideoView)this.findViewById(R.id.VideoView);
videoView.setVideoURI(Uri.parse("rtsp://192.1.0.193:554/mpeg4"));
videoView.requestFocus();
videoView.start();
我还在AndroidManifest.xml中给出了应用INTERNET权限,在相机上禁用了身份验证,并且在真实设备(而不是模拟器)上运行。
当我运行应用程序时,LogCat立即显示:
setDataSource IOException happend :
java.io.FileNotFoundException: No content provider: rtsp://192.1.0.193:554/mpeg4
at android.content.ContentResolver.openTypedAssetFileDescriptor (ContentResolver.java).
大约15秒后,应用程序显示“无法播放此视频”模式对话框,并将其添加到LogCat中:
MediaPlayer error (100, 0)
AudioSystem AudioFlinger server died!
MediaPlayer error (100, 0)
VideoView Error: 100,0
我用谷歌搜索了我能想到的一切,但没有找到任何有用的东西。
有什么想法吗?
答案 0 :(得分:2)
对你的logcat进行疯狂猜测并且RC = 100 ...没有SDP文件或没有等效的'moov atom'块的RTSP来协商流/容器/编解码器/格式的详细信息...您可以获取mediaPlayer / videoView的AOSP代码,并在源代码中获取RC值。
RTSP很难调试(注意工具链接),并且由于UDP问题而无法确保在NAT'd网络内运行。因此,为了获得更好的结果,您可能需要考虑强制您的配置在TCP而不是UDP上执行数据通道。或者它可能是其他问题,其中有很多。
如果你真的想调查一下,可以使用下面的一些工具:
使用命令行和CURL client来请求您的信息流:
Android - Java RTSP会话管理包on Git
Protocol dumps用于与Youtube RTSP / SDP流的CLI RTSP会话
要解决这个问题,您可能需要使用调试工具进入杂草,这些工具会跟踪MediaPlayer实际开始在流上播放之前协议协商的详细信息。这将包括学习RFP和协议细节。
答案 1 :(得分:0)