我的新监控摄像头刚到,所以我正在尝试编写一个应用程序来实时流式传输来自它的视频。
因为它基本上没有文档,所以我安装了“onvifer”安卓应用程序,它允许您浏览相机的功能。这个应用程序工作正常 - 获取视频并允许 PTZ 控制等。它将流媒体 url 报告为:
rtsp://192.1.0.193:554/mpeg4
我在 VLC windows 客户端中测试了流,它也能够从该 URL 流式传输视频。这让我很放心,因为网络工作正常。
摄像头声明 Feed 为 1920x1080; VLC 证实了这一点。
我 Activity 中的基本代码:
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
我用谷歌搜索了所有我能想到的东西,但没有找到任何有用的东西。
有什么想法吗?
最佳答案
在你的 logcat 和 RC=100 上进行疯狂猜测...没有 SDP 文件或没有用于协商流/container/codec/格式细节所需的“moov atom” block 的 RTSP 等效文件...您可以获得 mediaPlayer/videoView 的 AOSP 代码,并在源代码中获取 RC 值。
RTSP 很难调试(请注意工具链接)并且由于 UDP 问题不能保证在 NAT 网络中运行。因此,为了获得更好的结果,您可能需要考虑强制您的配置在 TCP 而不是 UDP 上执行数据通道。或者可能是其他问题,其中有很多。
如果你真的想调查,下面的一些可能的工具:
使用命令行和CURL client请求您的流:
Android - Java RTSP session 管理包 on Git
Protocol dumps用于到 Youtube RTSP/SDP 流的 CLI RTSP session
要解决这个问题,您可能需要使用调试工具深入了解在 MediaPlayer 实际开始播放流之前的协议(protocol)协商细节的调试工具。这将包括学习 RFP和协议(protocol)细节。
关于android - RTSP 1080p 直播安卓客户端报错 (100,0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25215724/