【问题标题】:Playing video stream from ip camera's with m3u8 playlist of ts files使用 ts 文件的 m3u8 播放列表从 ip camera 播放视频流
【发布时间】:2015-01-05 03:30:57
【问题描述】:

我在开发与我的网络摄像机一起使用的小 apk 时遇到了问题。我可以播放来自苹果 (http://devimages.apple.com/iphone/samples/bipbop/gear4/prog_index.m3u8) 的测试视频,但我无法从我的摄像头播放 .m3u8。 文件的地址是 ip_adress/web/list.m3u8,我可以在 chrome 中访问它而无需身份验证。 List.m3u8 看起来像这样:

EXTM3U 
EXT-X-TARGETDURATION:2
EXT-X-MEDIA-SEQUENCE:1581
EXTINF:2,
HLS-0001581.ts
EXTINF:2,
HLS-0001582.ts
EXTINF:2,
HLS-0001583.ts

据我了解,错误“无法播放该视频”不是来自 m3u8,而是来自 .ts 文件。那是对的吗?我该怎么做才能在我的 apk 中播放 .ts 文件?我使用的是 android 4.1.2 并且支持 MPEG-2 TS。 有谁知道出了什么问题?

01-05 04:19:15.223: E/Trace(16138): error opening trace file: No such file or directory (2)
01-05 04:19:15.223: D/ActivityThread(16138): setTargetHeapUtilization:0.25
01-05 04:19:15.223: D/ActivityThread(16138): setTargetHeapIdealFree:8388608
01-05 04:19:15.223: D/ActivityThread(16138): setTargetHeapConcurrentStart:2097152
01-05 04:19:17.153: D/libEGL(16138): loaded /system/lib/egl/libEGL_adreno200.so
01-05 04:19:17.303: D/libEGL(16138): loaded /system/lib/egl/libGLESv1_CM_adreno200.so
01-05 04:19:17.303: D/libEGL(16138): loaded /system/lib/egl/libGLESv2_adreno200.so
01-05 04:19:17.303: I/Adreno200-EGL(16138): <qeglDrvAPI_eglInitialize:299>: EGL 1.4QUALCOMMbuild(Merge)
01-05 04:19:17.303: I/Adreno200-EGL(16138): Build Date: 07/09/13 Tue
01-05 04:19:17.303: I/Adreno200-EGL(16138): Local Branch: AU_41
01-05 04:19:17.303: I/Adreno200-EGL(16138): Remote Branch: 
01-05 04:19:17.303: I/Adreno200-EGL(16138): Local Patches: 
01-05 04:19:17.303: I/Adreno200-EGL(16138): Reconstruct Branch: 
01-05 04:19:17.593: D/OpenGLRenderer(16138): Enabling debug mode 0
01-05 04:19:17.613: E/MediaPlayer(16138): Uri is  <URL suppressed>
01-05 04:19:17.613: D/MediaPlayer(16138): Couldn't open file on client side, trying server side
01-05 04:19:17.623: I/Choreographer(16138): Skipped 37 frames!  The application may be doing too     much work on its main thread.
01-05 04:19:17.983: D/MediaPlayer(16138): getMetadata
01-05 04:19:17.983: D/MediaPlayer(16138): start() mUri is <URL suppressed>
01-05 04:19:18.083: E/MediaPlayer(16138): error (1, -1007)
01-05 04:19:18.083: E/MediaPlayer(16138): Error (1,-1007)
01-05 04:19:18.083: D/VideoView(16138): Error: 1,-1007

它说文件不存在 - 文件与播放列表 (ip/web/) 位于同一位置。我可以直接在 chrome 中“捕捉”它们。视频编解码器为 H264 MPEG-4 AVC,分辨率为 640x352。

相机网页,获取列表如下:

img2345.src = "/list.m3u8?" + (new Date()).getTime();

【问题讨论】:

  • 很难回答。我建议您设置一个测试项目,将其中一个文件直接下载到 SD 卡并尝试从那里播放。如果它仍然无法播放,那么问题显然不在于网络访问或处理 m3u8。请记住,TS 文件只是一个容器,根据它包含的流类型可能兼容也可能不兼容 - 特别是比特率、样本大小等可能是导致播放问题的因素。
  • 感谢您的回答 - 我这样做了,并且收到了同样的错误,除了无法创建 MediaPlayer。如果你这么好,并且有知识,你能告诉我我应该如何处理播放列表文件吗?它不断变化,而不是使用“-1”作为视频长度 - android会自己处理它吗?抱歉新手问题。 ;)

标签: android stream ip-camera m3u8 mpeg-2


【解决方案1】:

错误 -1007 是 MEDIA_ERROR_MALFORMED。

Android 仅支持 H.264 AVC 的 Baseline 配置文件。如果您的编码不使用基线配置文件,它可能无法播放。

要检查.ts 段的编码,并使用ffprobe 或MediaInfo 或类似方式查看它并检查配置文件。

Android Supported Media Formats

MediaInfo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-01
    • 1970-01-01
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多