【问题标题】:medialement.js not working for my hls on iphonemediaelement.js 不适用于我在 iPhone 上的 hls
【发布时间】:2018-12-17 13:58:13
【问题描述】:

这是我的 m3u8 文件: cat 8.m3u8

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-ALLOW-CACHE:YES
#EXT-X-MEDIA-SEQUENCE:1131
#EXT-X-TARGETDURATION:5
#EXTINF:4.950, no desc
1545049888215.ts
#EXTINF:4.950, no desc
1545049893218.ts

我将它作为静态文件提供给http://104.248.205.68:31339/8.m3u8

我使用 mediaelemnts.js 来运行这个 hls 视频:jsfiddle

html:

<video width="240" height="160"  
    id="player1" src="http://104.248.205.68:31339/8.m3u8" 
    controls="controls" autoplay preload="auto" muted ></video>

js:

  $('video').mediaelementplayer({});

它在 chrome mac os 桌面上运行良好。但不适用于 iphone 8+(safari 和 chrome)。控制台中没有错误。视频没播放,黑屏。在视频的全屏模式下 - 相同。

同时,如果我在网上随便找了一个m3u8,用mediaelemnts.js播放,在iPhone上运行良好(至少全屏模式)jsfiddle 2

所以我猜我的 m3u8 文件有问题,因为其他 m3u8 可以在 iPhone 上运行。

如果我在 Iphone 上加载问题页面时打开网络选项卡,我看到它正在下载文件但由于某种原因没有显示视频。

更新

我检查了 android:galaxy s5 和galaxy s9+ in chrome: 都可以。

更新 2

带有 ts 文件和 m3u8 的 Zip 存档:http://104.248.205.68:31339/8.m3u8.zip

【问题讨论】:

标签: http-live-streaming mediaelement.js


【解决方案1】:

在检查媒体文件 [1] 时,可以发现 PMT(节目映射表)表示流中有音频,但实际上不存在音频的 TS 数据包(即没有音频数据)。

看起来播放器等待音频 TS 数据包以便为音频和视频建立一个公共缓冲区,然后才开始播放。由于流缺少永远不会发生的音频数据。要备份它,您可以使用ffmpeg 使用以下命令从媒体片段中删除音轨,并发现一旦执行此操作即可播放。

ffmpeg -i 1545049893218.ts -an -vcodec copy 1545049893218-v.ts

此外,此问题仅在 iOS 上的 Safari 和 Chrome 中出现的原因是,在这些情况下,mediaelement.js 正在使用浏览器的本机功能来播放 HLS,而不是使用的 JavaScript 播放器(如 hls.js)其他平台(例如桌面上的 Chrome),并且更能容忍此类问题。

[1] 例如使用http://thumb.co.il/ffprobe


编辑:

虽然上述内容可能足以使其在较旧的 Apple 移动设备上运行 - 我在 iPhone 6 iOS10 上进行了测试 - 较新的设备似乎更具限制性。官方HLS Authoring Spec表示

8.11。您必须在直播/线性播放列表中提供至少 6 个片段。

这似乎不是某些 iOS 版本的硬性要求。但是,为确保它适用于所有版本,应满足这些要求。

我在 iOS12 的 iPhone X 上做了一个快速测试,发现如果播放列表中至少提供 3 个片段,只需复制最后一个片段条目即可播放。

【讨论】:

  • 感谢您的 awser!我转换了我的两个 ts 文件剪切音频:ffmpeg -i 1545049893218.ts -an -vcodec copy 1545049893218-v.ts 并部署在端口 31340 jsfiddle 它仍然无法在 iphone 上运行
  • 我最初是在运行 iOS10 的 iPhone 6 上进行测试的。请参阅我对答案的修改。
  • 好的,我添加了超过 6 个片段,它可以在 iPhone 8 plus 的 safari 和 chrome 上运行 jsfiddle.net/aoz6qhnp/1
  • 你能分享一下你用什么程序来检查媒体文件,以及你是如何得出没有音频数据的结论的
  • 我专门使用了ffprobe 1545049888215.ts,它会列出一个音轨,但无法提供有关它的元数据,例如通道数或比特率。然后我使用了ffprobe -show_packets 1545049888215.ts &gt; 1545049888215-packets.txt,我只发现存在视频数据。此外,我使用了thumb.co.il,在那里我在 PMT 中找到了音轨,但只有 TS 数据包用于视频,而没有用于音频。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-09
相关资源
最近更新 更多