Ширина видео и высота 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);