3

AVPlayer (Swift) を使用して HLS ストリームを再生したい。

この HLS ストリームは Safari で再生されますが、AVPlayer を使用したいときは再生されません。

私のコード:

let hlsLink = 'http://thelinktomyHLSmovie'
let player = AVPlayer(URL: NSURL(string: hlsLink)!)

let playerVC = AVPlayerViewController()
playerVC.player = player
presentViewController(playerVC, animated: true) {
    playerVC.player?.play()
}

HLS URL に CURL を実行して、そこに含まれるストリームの種類を調べると、次のようになります。

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2328000,CODECS="avc1.66.30,mp4a.40.2",RESOLUTION=1280x720
chunklist_w1751887550_b2328000.m3u8?smil=1
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=128000,CODECS="mp4a.40.2"
chunklist_w1751887550_b128000_ao.m3u8?smil=1

これは私には問題ないようです。

小さくて短い他のストリームで同じことを行うと、すべて正常に動作します。

私はすでに AVPlayer と AVPlayerItem の状態を観察しようとしましたが、有用なものは報告されませんでした。

私は何が欠けていますか?

アップデート:

すでに述べたように、AVPlayerItem を追加しました。また、通知オブザーバーをプレーヤー、プレーヤー ビュー コントローラー、およびすべての通知のプレーヤー アイテムに追加しprint、出力を編集しました。これにより、次のことがわかりました。

Optional(NSConcreteNotification 0x7fd272bcd600 {name = AVPlayerItemTimebaseChangedNotification; object = <AVPlayerItem: 0x7fd2714f6c40, asset = <AVURLAsset: 0x7fd27144e720, URL = http://hls.streamonecloud.net/vod/amlst:pwlsaeYN1ZuH/playlist.m3u8?smil=1>>})
Optional(NSConcreteNotification 0x7fd272bccaf0 {name = AVPlayerItemBecameCurrentNotification; object = <AVPlayerItem: 0x7fd2714f6c40, asset = <AVURLAsset: 0x7fd27144e720, URL = http://hls.streamonecloud.net/vod/amlst:pwlsaeYN1ZuH/playlist.m3u8?smil=1>>})
Optional(NSConcreteNotification 0x7fd272bcd710 {name = AVPlayerCurrentItemDidChangeNotification; object = <AVPlayer: 0x7fd27157ca60>; userInfo = {
    CurrentDuration =     {
        epoch = 0;
        flags = 17;
        timescale = 0;
        value = 0;
    };
    ReasonForCurrentItemDidChange = ReasonAdvanceAtEnd;
}})
Optional(NSConcreteNotification 0x7fd271759950 {name = AVPlayerItemTimebaseChangedNotification; object = <AVPlayerItem: 0x7fd2714f6c40, asset = <AVURLAsset: 0x7fd27144e720, URL = http://hls.streamonecloud.net/vod/amlst:pwlsaeYN1ZuH/playlist.m3u8?smil=1>>})

商品のaccessLog()中身も調べました。errorLog()アクセス ログにはエントリがなく (ただし存在します)、エラー ログはありません。

もうどうしたらいいのかわからない。上記のログには、興味があればロードしたい URL が含まれています (サーバーの 1 つにある Big Buck Bunny のみ)。

4

0 に答える 0