【问题标题】:How to play m3u8 links using flutters video_player or chewie or video_viewer plugin?如何使用flutters video_player或chewie或video_viewer插件播放m3u8链接?
【发布时间】:2021-06-19 21:19:47
【问题描述】:

我注意到使用flutters video_player插件的一些链接在iOS设备上不起作用,但是如果我使用下面的示例链接,它在所有设备上都可以正常工作,即使在android和iOS上也是如此。

https://sfux-ext.sfux.info/hls/chapter/105/1588724110/1588724110.m3u8

以下链接不适用于 iOS 设备,但适用于 Android 设备,

https://5421175365ea3.streamlock.net/live/smil:switch.smil/playlist.m3u8

https://dcunilive28-lh.akamaihd.net/i/dclive_1@533583/master.m3u8

有什么线索可以让它发挥作用吗?

【问题讨论】:

    标签: flutter flutter-dependencies flutter-video-player


    【解决方案1】:

    如果您使用的是 video_player,您应该注释下面的 ios 代码

    // The player may be initialized but still needs to determine the duration.
    if ([self duration] == 0) {
      return;
    }
    

    在第 315 行

    YOUR_SDK_FOLDER\flutter\.pub-cache\hosted\pub.dartlang.org\video_player-your_player_version_no\Classes\FLTVideoPlayerPlugin.m

    似乎实时 hls 流总是返回 duration=0

    【讨论】:

      【解决方案2】:

      您的 HLS 播放列表非常简陋,有很多问题,最大的问题是缺少编解码器信息。

      使用Apples HTTP Livestreaming 工具验证您的播放列表。

      第一个链接的摘录:

      Must Fix Issues
      1. Measured peak bitrate compared to master playlist declared value exceeds error tolerance
      
          Master Playlist Stream Definition for All Variants
      
      2. I-frame playlists ( EXT-X-I-FRAME-STREAM-INF ) MUST be provided to support scrubbing and scanning UI
      
          Master Playlist
      
      3. Your EXT-X-STREAM-INF and EXT-X-I-FRAME-STREAM-INF tags MUST always provide CODECS attribute
      
          Master Playlist Stream Definition for All Variants
      
      4. Your EXT-X-STREAM-INF and EXT-X-I-FRAME-STREAM-INF tags MUST always provide the RESOLUTION attribute if the rendition(s) include video
      
          Master Playlist Stream Definition for All Variants
      
      5. You MUST include the AVERAGE-BANDWIDTH attribute
      
          Master Playlist Stream Definition for All Variants
      
      6. Each EXT-X-STREAM-INF tag MUST have a FRAME-RATE attribute
      
          Master Playlist Stream Definition for All Variants
      
      7. The server MUST deliver playlists using gzip content-encoding
      
          All Variants
          Master Playlist
      
      8. The EXT-X-PROGRAM-DATE-TIME tag MUST be present in every live/linear media playlist
      
          All Variants
      
      9. You MUST provide at least 6 segments in a live/linear playlist
      
          All Variants
      
      10. If EXT-X-INDEPENDENT-SEGMENTS is not in master playlist, then you MUST use the EXT-X-INDEPENDENT-SEGMENTS tag in all video media playlists
      
          All Variants
      

      所有这些问题都会阻止 HLS 在 Apple 设备上播放,Android 可能会更宽松一些。

      【讨论】:

      • 5421175365ea3.streamlock.net/live/smil:switch.smil/… dcunilive28-lh.akamaihd.net/i/dclive_1@533583/master.m3u8 链接都可以直接在 Mobiles safari 浏览器和 swifts 原生 AVplayer 上运行。我们如何使用flutters video_player插件播放上面的链接?它在颤振 vlc 播放器上运行良好,但 vlc 播放器不提供任何 UI 控件。它在两者之间冻结
      • 它们可能在第三方播放器和平台上运行良好,但众所周知,Apple 对其设备接受的有效 HLS 非常严格。 (这对他们的用户来说是一件好事,只是要明确一点。)而且由于在 iOS 上,颤振的 video_player 由原生 AVPlayer(参考:pub.dev/packages/video_player#supported-formats)支持,我仍然认为你的问题是 HLS 损坏。跨度>
      • 我用 AVPlayer 尝试了所有 3 个链接,本机应用程序在苹果设备上运行良好,没有任何问题。第二个链接5421175365ea3.streamlock.net/live/smil:switch.smil/… 来自 wowza 流媒体服务。我怀疑 video_player 没有读取这种类型的 m3u8 语法。应该有办法通过使用正则表达式或其他方法来提取它。
      猜你喜欢
      • 2021-08-05
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      • 2023-02-03
      • 1970-01-01
      • 1970-01-01
      • 2022-10-30
      相关资源
      最近更新 更多