2013-03-17 3 views
4

Я играю в реальном времени с использованием AVPlayer и AVPlayerItem и пытается определить текущую скорость передачи данных в потоке. Я искал в сети и нашел эту помощь: Determening MPMovieController bit-rateОпределение скорости передачи данных AVPlayer

Вдохновленный выше нить, я попытался вычислить его, используя следующий код:

NSArray *logEvents=playerItem.accessLog.events; 
AVPlayerItemAccessLogEvent *event = (AVPlayerItemAccessLogEvent *)[logEvents lastObject]; 
double bitRate=event.observedBitrate; 

Но переменная bitRate всегда равна нулю, когда проверяется внутри таймер.

Фактически [logEvents count] также всегда равен нулю.

Не могли бы вы рассказать мне, что не так с техникой?

Большое спасибо.

ответ

0

В этом методе ничего плохого. Проверьте, действительно ли ваш playerItem загружен. AccessLog равен нулю до тех пор, пока playerItem не будет «доступ». Попробуйте получить accessLogs после того, как ваш плеер станет AVPlayerStatusReadyToPlay, и вы получите журнал.

4

В дополнение к предложению Ooops, возможно, было бы разумно зарегистрироваться для уведомления для проверки битрейта.

Поскольку массив журнала доступа не соответствует требованиям KVO, использование этого уведомления позволит вам не использовать таймер для проверки обновлений, и вам не придется беспокоиться о том, чтобы ждать, пока элемент игрока будет готов. Если события вызывают слишком часто, вы можете игнорировать некоторые из них.