[在iOS中播放m3u8文件

问题描述 投票:1回答:2

我知道这个问题要花很多时间,但得不到适当的解决方案,

我有一个m3u8文件无法在AVPlayer中工作,但是如果我使用的是已经在Internet上的其他m3u8文件,可以与AVPlayer正常工作,这是我的代码

func playVideo() {
    let videoURL = URL(string: "https://architectsummit.s3.us-east-2.amazonaws.com/hls/playlist-with-vtt.m3u8")
    let player = AVPlayer(url: videoURL!)
    var playerViewController = AVPlayerViewController()
    playerViewController.player = player
    DispatchQueue.main.async {
        self.present(playerViewController, animated: true) {
            playerViewController.player!.play()
        }
    }
}      

在上面的代码中,我使用了由我们的开发人员提供的m3u8文件,但是,如果我在上面的代码中使用此URL'https://bitdash-a.akamaihd.net/content/sintel/hls/playlist.m3u8',则正在播放问题,任何人都可以帮助我。

ios swift avplayer
2个回答
0
投票

我已经使用AVPlayerItem解决了类似的问题,以存储对AVAset的引用。

1)首先创建对象>

var player: AVPlayer? var playerLayer: AVPlayerLayer? var urlM3u8 = URL(string:"http://devstreaming.apple.com/videos/wwdc/2016/102w0bsn0ge83qfv7za/102/hls_vod_mvp.m3u8")

2)使功能发挥作用>

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.view.frame.width, height: self.view.frame.height) self.view.layer.addSublayer(playerLayer!) player?.play() }

3)调用

viewDidLoad()

中的函数并传递url
videoPlayer(url: urlM3u8!)
我在浏览器中选择了.m3u8链接,正在下载的清单是错误的。清单响应为

#EXTM3U #EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="English",DEFAULT=YES,AUTOSELECT=YES,FORCED=NO,LANGUAGE="en",URI=vtt_en.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=864000,SUBTITLES="subs" hls-medium.m3u8

清单的格式必须类似于this

服务器.m3u8文件不包含任何播放列表

也因为您使用亚马逊,所以可以从亚马逊page中查看一些示例>


0
投票
我在浏览器中选择了.m3u8链接,正在下载的清单是错误的。清单响应为
© www.soinside.com 2019 - 2024. All rights reserved.