如何从视频网址iOS获取可用的视频尺寸/质量?

时间:2016-04-13 07:01:16

标签: ios objective-c video avfoundation avplayer

我正在使用ios中的AVPlayer创建自定义视频播放器(OBJECTIVE-C)。我有一个设置按钮,点击后会显示可用的视频尺寸和音频格式。 以下是设计:

enter image description here

所以,我想知道:

1)。如何从视频网址(非本地视频)获取可用尺寸?

2)。即使我能够获得尺寸,我可以在AVPlayer中播放时在可用尺寸之间切换吗?

任何人都可以给我一个提示吗?

2 个答案:

答案 0 :(得分:5)

如果不是HLS(流媒体)视频,您可以使用以下代码获取分辨率信息。

示例代码:

// player is playing
if (_player.rate != 0 && _player.error == nil)
{
    AVAssetTrack *track = [[_player.currentItem.asset tracksWithMediaType:AVMediaTypeVideo] firstObject];
    if (track != nil)
    {
        CGSize naturalSize = [track naturalSize];
        naturalSize = CGSizeApplyAffineTransform(naturalSize, track.preferredTransform);

        NSInteger width = (NSInteger) naturalSize.width;
        NSInteger height = (NSInteger) naturalSize.height;
        NSLog(@"Resolution : %ld x %ld", width, height);
    }
}

但是,对于HLS视频,上面的代码不起作用。 我以不同的方式解决了这个问题。 当我播放视频时,我从视频中获取了图像,并计算了它的分辨率。

以下是示例代码:

// player is playing
if (_player.rate != 0 && _player.error == nil)
{
    AVAssetTrack *track = [[_player.currentItem.asset tracksWithMediaType:AVMediaTypeVideo] firstObject];
    CMTime currentTime = _player.currentItem.currentTime;
    CVPixelBufferRef buffer = [_videoOutput copyPixelBufferForItemTime:currentTime itemTimeForDisplay:nil];

    NSInteger width = CVPixelBufferGetWidth(buffer);
    NSInteger height = CVPixelBufferGetHeight(buffer);
    NSLog(@"Resolution : %ld x %ld", width, height);
}

答案 1 :(得分:0)

正如您所提到的那样,它不是本地视频,您可以通过某些网络服务来返回该特定视频的可用视频尺寸。之后,将URL更改为其他可用视频并寻找当前位置。

WooCommerce Order Status Change Notifier