Ширина и высота видео HLS в iOS

Я разрабатываю приложение для iOS с потоковой передачей HLS. Я использую AVPlayer playerWithURL для воспроизведения видео. Есть ли способ получить фактические размеры видео (ширину и высоту) из потока или плеера?

AVPlayerLayer videoRect возвращает размер видео слоя видеопроигрывателя, а не фактическое видео.

[_player.currentItem.asset tracksWithMediaType:AVMediaTypeVideo] возвращает нулевой массив объектов для этого URL-адреса потоковой передачи, поэтому я не могу использовать [track naturalSize].

Есть ли другой способ получить ширину и высоту видео?


person Anwer    schedule 31.01.2016    source источник
comment
Вы решили эту проблему?   -  person DixieFlatline    schedule 30.06.2016


Ответы (1)


В случае потокового видео HLS код не работает.

[_player.currentItem.asset треки] - пустой массив.

Таким образом, [_player.currentItem.asset trackWithMediaType: AVMediaTypeVideo] также возвращает ноль.

Я решил одну и ту же проблему с вами по-разному.

Я получил изображение из потокового видео и рассчитал разрешение, чтобы получить ширину и высоту.

Код ниже работает нормально:

if ((_player.rate != 0) && (_player.error == nil)) // player is playing
{
    AVAssetTrack *track = [[_player.currentItem.asset tracksWithMediaType:AVMediaTypeVideo] firstObject];
    if (track != nil) // not HLS
    {
        CGSize naturalSize = [track naturalSize];
        naturalSize = CGSizeApplyAffineTransform(naturalSize, track.preferredTransform);
        _videoWidth = (NSInteger) naturalSize.width;
        _videoHeight = (NSInteger) naturalSize.height;
    }
    else  // HLS!!
    {
        CMTime currentTime = _player.currentItem.currentTime;
        CVPixelBufferRef buffer = [_videoOutput copyPixelBufferForItemTime:currentTime itemTimeForDisplay:nil];
        _videoWidth = CVPixelBufferGetWidth(buffer);
        _videoHeight = CVPixelBufferGetHeight(buffer);
    }
}

NSLog(@"Resolution : %ld x %ld", _videoWidth, _videoHeight);
person hooni    schedule 17.02.2017