【问题标题】:RTSP 1080p live-streaming android client gets error (100,0)RTSP 1080p 直播安卓客户端出错 (100,0)
【发布时间】:2014-08-09 06:03:52
【问题描述】:

我的新监控摄像头刚到货,所以我正在尝试编写一个应用程序来直播视频。

由于它基本上没有文档,我安装了“onvifer”安卓应用程序,它允许您浏览相机的功能。此应用程序运行良好 - 获取视频并允许 PTZ 控制等。它将流式传输 url 报告为:

 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

我搜索了所有我能想到的东西,但没有发现任何有用的东西。

有什么想法吗?

【问题讨论】:

  • 因为它是一个媒体播放器,所以我在 start() 之前的某个地方错过了 preprare 或 prepareasync。我一直需要它。
  • @SatelliteSD,感谢您的回复。我正在使用 MediaPlayer 的 VideoView 包装器,据我所知,它负责prepare()。 stackoverflow.com/questions/18598675/…
  • 看到这个答案了吗? stackoverflow.com/questions/13291632/… 这里解释了这个问题以及 VLC 如何克服它。 fabiensanglard.net/mobile_progressive_playback/index.php
  • 再次感谢@SatelliteSD。我已经看到提到过这个问题,但是如果没有您的第二个链接,它就没有任何意义。我将不得不看看我是否能弄清楚如何自己诊断/编码所述的解决方法。我知道后会回复。
  • @SatelliteSD,这篇文章指出 MOOV 标头是流式传输 files 时的问题,而不是实时流式传输(这就是我正在做的)。想法? “在 RTSP 流的情况下,与服务器有一个 SDP 事务,它提供播放器开始播放所需的元数据。” mail-archive.com/android-framework@googlegroups.com/…

标签: android android-videoview onvif


【解决方案1】:

您的 logcat 和 RC=100 上的疯狂猜测...没有 SDP 文件或没有用于协商流/容器/编解码器/格式的详细信息所需的“moov atom”块的 RTSP 的等效文件...您可以获取 mediaPlayer/videoView 的 AOSP 代码并 grep 源中的 RC 值。

RTSP 难以调试(注意工具链接),并且由于 UDP 问题,不能保证在 NAT'd 网络中运行。因此,为了获得更好的结果,您可能必须考虑强制您的配置在 TCP 而不是 UDP 上执行数据通道。或者可能是其他问题,其中有很多。

如果你真的想调查,以下一些可能的工具:

使用命令行和CURL client 请求您的流:

Android - Java RTSP 会话管理包on Git

Protocol dumps 用于 Youtube RTSP/SDP 流的 CLI RTSP 会话

要解决此问题,您可能需要使用调试工具来跟踪协议协商的详细信息,该协议协商在 MediaPlayer 实际开始在流上播放之前进行。这将包括学习RFP 和协议细节。

【讨论】:

  • 据我所知,moov 的东西不适合直播。请参阅原始 cmets。
  • 解决方案将深入协议或 AOSP 代码的细节中。您可以在协议示例链接中看到的会话协商、会话设置的详细信息可能在某处失败(端口 4 音频、端口 4 视频、编解码器、数据包类型(UDP v TCP)...... ..)
  • 如果我是你,我不会在 RTSP 上浪费时间。试用 Web-RTC 以获得更现代的直播解决方案
  • 我不控制提要(它内置在相机中)。我只需要消耗它。
  • 我找到了一些 mediaplayer.cpp 的代码,打印“error (x,y)”的方法是用 MEDIA_ERROR 值调用的。 (100,0) 分别是 ext1(“媒体框架错误代码”)和 ext2(“实现相关错误代码”)。我相信当 ext1=100 时它是一个“MEDIA_ERROR_SERVER_DIED”,这可能与我收到的“AudioFlinger 服务器死亡!”的消息相关。我会再深入研究一下。
【解决方案2】:
  1. videoView.setVideoURI(“rtsp://192.1.0.193:554/mpeg4”);
  2. 在另一部手机上试用您的应用。
    您可能会发现问题出在移动设备上。
  3. 试试这个 路径:“rtsp://218.204.223.237:554/mo​​bile/1/4C024DFE77DC717D/onnuvesj43xj7t26.sdp”。
    看看代码有没有问题。

【讨论】:

  • 1. setVideoURI 不接受字符串。
  • 2.如上所述,我在平板电脑和手机上尝试了该应用程序,结果相同。麻烦的是android 4.4.2,虽然不同的制造商。
  • 3.该视频网址工作正常。我注意到该视频使用“MPEG4-Video (mp4v)”编解码器,并且只有 176x144。我的相机以 1920x1080 输出“H264 - MPEG-4 AVC(第 10 部分)(h264)”。更多想法,@wffger?
猜你喜欢
  • 1970-01-01
  • 2012-04-20
  • 1970-01-01
  • 1970-01-01
  • 2013-02-03
  • 2013-05-05
  • 1970-01-01
  • 2014-05-05
  • 1970-01-01
相关资源
最近更新 更多