【问题标题】:m3u8 file doesnt play in iOSm3u8 文件在 iOS 中无法播放
【发布时间】:2016-11-03 09:03:53
【问题描述】:

您好,我想使用 swift 播放 m3u8 文件。我的m3u8文件结构是这样的。

#EXTM3U

#EXT-X-VERSION:3

#EXT-X-STREAM- INF:BANDWIDTH=814508,CODECS="avc1.66.51,mp4a.40.34",RESOLUTION=720x576 chunklist_w247403833.m3u8

但这不是在播放。但是,如果我在here 中使用苹果示例 m3u8 文件,它会播放。但上面的 m3u8 文件也在 android 应用程序和 windows vlc 播放器中播放。这会是什么原因?请帮我。 谢谢

代码

 let videoURL = NSURL(string: "http://74.208.128.124:1935/live/myStream/playlist.m3u8")//http://devstreaming.apple.com/videos/wwdc/2016/102w0bsn0ge83qfv7za/102/hls_vod_mvp.m3u8
    let player = AVPlayer(url: videoURL! as URL)
    let playerLayer = AVPlayerLayer(player: player)
    playerLayer.frame = self.view.bounds
    self.view.layer.addSublayer(playerLayer)
    player.play()
}

添加 KVO

 override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
   if keyPath=="status"
   {
      if(player.status==AVPlayerStatus.readyToPlay)
      {
        print(player.status)
      }
    else if(player.status==AVPlayerStatus.failed)
      {
        print("ERROR-----------", player.status)
      }

   }
}

【问题讨论】:

  • 你的代码是什么?你收到AVPlayerStatus 和相应的错误了吗?
  • 尝试添加KVO监听状态,就像那里stackoverflow.com/questions/5401437/…我想寻找“KVO + Swift”+这个问题可能会对你有所帮助。您也许可以得到失败的原因。
  • 谢谢。我添加了 KVO,它从不打印我的错误日志,它进入 if(player.status==AVPlayerStatus.readyToPlay) 并且它只是在日志中打印 AVPlayerStatus
  • 如果是AVPlayerStatus.failed,请尝试阅读player.error?否则,看看那里 stackoverflow.com/questions/24004313/… 它可能会有所帮助。

标签: ios swift m3u8 avplayerviewcontroller


【解决方案1】:

尝试使用这个框架。它对我有用。

吊舱'基思'

对于示例项目,请下载并检查 https://github.com/Movile/Keith

【讨论】:

    【解决方案2】:

    尝试使用其他播放器,例如节点播放器。据我说,AVplayer 不是播放 m3u8 格式或直播流媒体的好选择。即使视频播放,播放时也会有延迟。

    【讨论】:

      【解决方案3】:

      我修复了一个类似的问题,使用 AVPlayerItem 来存储对 AVAsset 的引用。

      @IBOutlet weak var videoContainer: UIView!
      var player: AVPlayer?
      var playerLayer: AVPlayerLayer?
      var urlM3u8 = URL(string:"http://devstreaming.apple.com/videos/wwdc/2016/102w0bsn0ge83qfv7za/102/hls_vod_mvp.m3u8")
      
       func videoPlayer(url: URL){
          let item = AVPlayerItem(url: url)
          player = AVPlayer(playerItem: item)
          playerLayer = AVPlayerLayer(player: player)
          playerLayer?.videoGravity = .resizeAspect
          playerLayer?.frame = CGRect(x: 0, y: 0, width: self.videoContainer.frame.width, height: self.videoContainer.frame.height)
          videoContainer.layer.addSublayer(playerLayer!)
          player?.play()
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-04-04
        • 1970-01-01
        • 2013-02-06
        • 1970-01-01
        • 1970-01-01
        • 2013-03-23
        • 2017-10-01
        相关资源
        最近更新 更多