4

いくつかのタイプのストリーミングメディア用のより一般的なメディアコントローラーを作成しようとしており、UIをストリームのタイプに適合させたいと考えています。

  • オンデマンドファイルストリーム(つまり、ストリーミングされている単一のMP3ファイル)の場合、順方向と逆方向をシークできるはずです。したがって、シークスライダーが表示されます。
  • ライブストリームの場合、前後にシークすることはできないため、シークスライダーを非表示にする必要があります。

AVPlayer(またはおそらくAVPlayerItemまたはAVAsset)からストリームのタイプを判別する方法はありますか?

4

4 に答える 4

6

ライブビデオの長さは無期限です:

AVPlayer * player = ...;
const BOOL isLive = CMTIME_IS_INDEFINITE([player currentItem].duration);

AVPlayerItemアイテムのステータスが。の場合にのみ、期間を確認する必要がありAVPlayerItemStatusReadyToPlayます。

于 2016-12-23T00:00:27.077 に答える
2

まだこの機能を探している人のために、

AVPlayerItem>AVPlayerItemAccessLogEvent>playbackTypeプロパティが役立つ場合があります。すでに「VOD」をチェックしましたが、「LIVE」タイプが適切に返されました。

詳細はこちら

于 2019-11-22T11:31:14.473 に答える
1

これは不可能のようです。

ただし、ライブストリームの継続時間を確認することはできます。これは、一貫して33000秒を超えているようです。ただし、この値は依然として変動しており、予期しない動作を引き起こす可能性があるため、これをチェックすることは望ましくありません。

于 2011-09-15T14:55:13.913 に答える
0

解決

このコードを使用すると、再生タイプを簡単に検出できます。

NotificationCenter.default.addObserver(
            forName: NSNotification.Name.AVPlayerItemNewAccessLogEntry,
            object: nil,
            queue: OperationQueue.main) { [weak self] (notification) in
                guard let self = self else { return }

                guard let playerItem = notification.object as? AVPlayerItem,
                    let lastEvent = playerItem.accessLog()?.events.last else {
                    return
                }

                // Here you can set the type (LIVE | VOD | FILE or unknow if it's a nil):
                print("Playback Type: \(lastEvent.playbackType ?? "NA")")
        }

オブザーバーコードを、通常それらを聞き始める場所に追加します。

また、deinitでオブザーバーを削除することを忘れないでください;)

deinit {
    NotificationCenter.default.removeObserver(self,
                           name: NSNotification.Name.AVPlayerItemNewAccessLogEntry,
                         object: self)
}

これが誰かを助けることを願っています:)

于 2020-04-03T04:59:48.653 に答える