как получить битрейт потокового видео на устройствах iPhone/iPad?

У меня есть приложение для iOS, которое транслирует видео на устройства iPhone/iPad.

Теперь мне нужно получить битрейт потокового видео на устройстве iPhone/iPad. ObservedBitrate и IndicatedBitrate в этом не помогут.

Я также наткнулся на этот пост ниже, но в нескольких комментариях упоминается, что он работает только для видео mpeg4. Как проверить разрешение, битрейт видео в iOS

Я ищу битрейт потокового видео на iPhone / iPad и для любого видеоформата.

Спасибо!


person sia    schedule 19.03.2021    source источник
comment
1. какой протокол паровой обработки используется? Приведите пример. 2. что говорят ObservedBitrate и IndicatedBitrate? 3. где ваши коды?   -  person Raptor    schedule 22.03.2021
comment
@Raptor - использование ABR через http. При этом наблюдаемый битрейт находится в пределах 2-3 Мбит/с, а указанный также примерно такой же. Я ищу - есть ли способ получить фактический битрейт потокового видео - формула или какое-либо свойство.   -  person sia    schedule 22.03.2021
comment
AVPlayerItemAccessLogEvent - не влияет даже на битрейт потокового видео.   -  person sia    schedule 22.03.2021
comment
Так каков ожидаемый битрейт? с помощью Adobe HTTP Dynamic Streaming или Apple HTTP Live Streaming?   -  person Raptor    schedule 22.03.2021
comment
Помогает ли это?   -  person Raptor    schedule 22.03.2021
comment
ИСПОЛЬЗОВАНИЕ Apple HTTP Live Streaming   -  person sia    schedule 22.03.2021
comment
@raptor - я пробовал - переключать битрейт тоже .. не помогает.   -  person sia    schedule 22.03.2021
comment
Можете ли вы уточнить не помогает, добавив коды в ваши вопросы, и указать ожидаемые результаты. В настоящее время вопрос слишком расплывчатый без подробностей.   -  person Raptor    schedule 22.03.2021


Ответы (1)


Вы можете прослушать уведомление AVPlayerItemNewAccessLogEntry, чтобы получить текущий битрейт для вашего потока, например:

  • observedBitrate — ваша текущая скорость загрузки
  • indicatedBitrate - происходит от m3u8 (BANDWIDTH) и означает минимальное значение битрейта для воспроизведения вашего текущего потока.

Адаптивное воспроизведение видео с помощью AVPlayer может изменить текущий поток на поток с высокой или низкой пропускной способностью туда и обратно в зависимости от условий сети, но эти изменения не появляются при каждых прилавках, проблемах с сетью и т. д., потому что ваш Steam может быть буферизован, m3u8 не имеет поток с более низкой пропускной способностью для воспроизведения и т. д. Поэтому, если вам нужно определить текущее состояние воспроизведения в реальном времени, обратите внимание на зависания, FPS.

В Swift есть пример кода, но его легко преобразовать в objc, если вам нужно:

let url = URL(string: "https://bitdash-a.akamaihd.net/content/MI201109210084_1/m3u8s/f08e80da-bf1d-4e3d-8899-f0f6155f6efa.m3u8")!
let playerItem = AVPlayerItem(url: url)
self.player = AVPlayer(playerItem: playerItem)

NotificationCenter.default.addObserver(forName: .AVPlayerItemNewAccessLogEntry, object: playerItem, queue: nil) { notification in
    if let event = playerItem.accessLog()?.events.last {
        let bitrates = [event.observedBitrate,
                        event.indicatedBitrate,
                        event.averageVideoBitrate,
        ]
        print(">", bitrates)
    }
}

player?.play()

let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = view.bounds
view.layer.addSublayer(playerLayer)

Outputs:

> [16375938.865617642, 628000.0, 307568.0]
> [nan, 1728000.0, 0.0]
> [9830221.39078689, 2528000.0, 1422032.0]


person iUrii    schedule 22.03.2021
comment
Я сделал именно то, что вы упомянули выше, но с некоторыми из моих собственных URL-адресов: stream.radiojar.com/nhq0vcqwuueuv или ice1.somafm.com/groovesalad-128-mp3 — уведомление не звонят - person Shawn Frank; 17.06.2021