【问题标题】:Playlist file(m3u8) give another playlist file infinitely not giving any media file播放列表文件(m3u8)无限提供另一个播放列表文件,不提供任何媒体文件
【发布时间】:2012-03-15 12:45:53
【问题描述】:

我有一个播放列表文件,它给了我另一个播放列表文件,它也给我另一个播放列表文件,持续不断。
如何播放此播放列表文件?以及在哪里可以找到视频的来源?

例如,我有一个播放列表文件。那是

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=355670
http://slive.ytn.co.kr:1935/live/ylive_0624_1.sdp/playlist.m3u8?wowzasessionid=195968950

如果我访问http://slive.ytn.co.kr:1935/live/ylive_0624_1.sdp/playlist.m3u8?wowzasessionid=195968950,它会给我其他播放列表文件。

#EXTM3U
#EXT-X-ALLOW-CACHE:NO
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:894
#EXTINF:11,
media_894.ts?wowzasessionid=195968950
#EXTINF:10,
media_895.ts?wowzasessionid=195968950
#EXTINF:11,
media_896.ts?wowzasessionid=195968950

如果我访问结果,它也会给我播放列表文件。

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=373764
http://slive.ytn.co.kr:1935/live/ylive_0624_1.sdp/playlist.m3u8?wowzasessionid=1093961187

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=382539
http://slive.ytn.co.kr:1935/live/ylive_0624_1.sdp/playlist.m3u8?wowzasessionid=1566364859

etc...

虽然我可以在 iphone 的 safari 中播放 url http://slive.ytn.co.kr:1935/live/ylive_0624_1.sdp/playlist.m3u8?wowzasessionid=195968950,但我想在我自己的 iphone 应用程序中播放这个 url。
如何自己播放m3u8文件扩展名?

【问题讨论】:

    标签: iphone media-player playlist m3u


    【解决方案1】:

    编辑 - 可能是 this SO question 的副本,但如果您想保留文件,则需要采用下面列出的艰难方法。

    简单方法 = 将 UIWebView 嵌入到您的应用中,并使用 .m3u8 文件的 url 对其进行初始化。这将打开能够理解 m3u8 的 quicktime,它会在下载时播放它。

    困难的方式 = 为 m3u8 会话的每个部分手动创建请求/响应,然后从播放列表文件中依次下载每个 .ts 文件。当您获得视频的每个“块”时,将其写入文件或内存,然后在其后附加下一个“块”。我已经为一个用作 m3u8 的 h.264 编码的 .m4v 文件完成了此操作,并且它可以工作(我的代码太难贴了),但伪代码是:

    1. 获取 m3u8,保存所有发送的 cookie 和任何可能重要的标头*
    2. 解析 .m3u8(第一个文件,#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=373764)并提取我们的网址。
    3. 从 .m3u8 文件中的 URL 之一获取播放列表(确保在请求中保留任何可能需要的标头/cookie)
    4. 解析播放列表文件,从文件顶部保存尽可能多的元数据,为每个 .ts 路径构造一个绝对 URL,然后将其填充到一个数组中。
    5. 遍历数组(再次注意 cookie/标头)并将每个 .ts URL 的内容提取到文件中。
    6. 使用您选择的任何媒体框架播放下载的文件(搜索 SO 以了解如何执行此操作)

    如果您只需要播放文件,请走简单的路线。如果你需要坚持他们,你需要跳 m3u8 舞蹈。

    *HTTP Scoop 对于了解 m3u8“协议”的工作原理以及确保您的请求/响应标头是准确的 - http://tuffcode.com/

    *我使用 vanilla NSURLConnection 同步调用,因为我的代码只是概念验证,其他网络框架(如 AFNetworking)将使这更容易。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-08
      • 1970-01-01
      • 2014-04-20
      • 2021-10-22
      • 2016-05-01
      • 2023-03-17
      • 2011-07-19
      • 1970-01-01
      相关资源
      最近更新 更多