【发布时间】:2011-11-19 10:43:03
【问题描述】:
我在 StackOverflow 上搜索了所有类似的问题,但没有一个可以回答我的问题。
我正在尝试将一些电影从我的 Linux 计算机 (openSuSE 12.1) 流式传输到我的 iPad。我用 ffmpeg 转换它们,用我自己的分段器对它们进行分段,将它们放在我的 apache2 服务器的 www 文件夹中,并放在 .m3u8 播放列表中。直到这里 - 一切都好!
我开始播放电影(带有标签的 HTML 页面),它播放得很好,但只有前五个片段已经加载了播放列表的第一次加载。 HTML 页面(浏览器或播放器 - 不知道)不会从服务器刷新(重新下载)播放列表。这是我的 .m3u8 播放列表文件的样子:
#EXTM3U
#EXT-X-MEDIA-SEQUENCE:19
#EXT-X-TARGETDURATION:8
#EXTINF:8,
http://192.168.1.4/segment_19.ts
#EXTINF:8,
http://192.168.1.4/segment_20.ts
#EXTINF:8,
http://192.168.1.4/segment_21.ts
#EXTINF:8,
http://192.168.1.4/segment_22.ts
#EXTINF:8,
http://192.168.1.4/segment_23.ts
片段与播放列表文件位于同一文件夹中,片段已正确编码(因为我至少可以看到前五个 :D)。我还观看了来自 apache 服务器的 access_log,我看到了播放列表的第一次加载,然后是所有 5 个片段的后续加载,直到那里停止。它甚至不会尝试进一步刷新 m3u8 文件。
如果重要的话 - iOS 5.0、iPad 2、仅限 Wi-Fi 版本,未越狱
想法?我做错了什么?
【问题讨论】:
-
这只是一个想法,但是请求playlist.m3u8文件时Expires HTTP header的值是多少?也许用户代理正在缓存它?
-
嗨,好主意。我检查了 httpd.conf 文件和所有包含的过期设置。没有。所以我专门设置:ExpireByDefault "now" 所以现在它应该总是正常过期。由于您的这个输入,我决定检查与 WireShark 的通信。以下是我的观察:1)它首先获取我的播放列表和部分数据;条件是:if-modified-after,这意味着它检查更改; 2)服务器发送文件,因为它已被更改(第一次下载:)) 3)iPad 下载所有 ts 文件并停止 4)不再有来自 iPad 的查询......想法?
-
若要排除 iPad,请尝试使用支持 HLS 的夜间版本的 VLC 播放器观看 HLS。打开消息窗口以查看 VLC 是否正确地重新读取播放列表文件。如果它适用于 VLC,那么它与 iPad 有关。一些 VLC nightlies 已损坏,因此您可能想在这里尝试绝对有效的客户端 - demo.anevia.com:8080/ott/vlc.php
标签: ios apache2 ffmpeg playlist http-streaming