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

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

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

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

Есть ли другой вариант, который я могу получить ширину и высоту видео?

1 ответ

Решение

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

[_player.currentItem.asset track] представляет собой пустой массив.

Так что "[_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);
Другие вопросы по тегам