1

HLS ストリーミングを使用して iOS アプリケーションを開発しています。AVPlayer playerWithURL動画再生に使用しています。ストリームまたはプレーヤーから実際のビデオのサイズ (幅と高さ) を取得する方法はありますか?

AVPlayerLayer videoRect実際の動画ではなく、動画プレーヤー レイヤーの動画サイズを返します。

[_player.currentItem.asset tracksWithMediaType:AVMediaTypeVideo]は、このストリーミング URL に対してゼロのオブジェクト配列を返すため、使用できません[track naturalSize]

ビデオの幅と高さを取得できる他のオプションはありますか?

4

1 に答える 1

1

HLS ストリーミング ビデオの場合、コードは機能しません。

[_player.currentItem.asset track] は空の配列です。

したがって、「[_player.currentItem.asset trackWithMediaType:AVMediaTypeVideo]」も nil を返します。

私はあなたと同じ問題をさまざまな方法で解決しました。

ストリーミングビデオから画像を取得し、解像度を計算して幅と高さを取得しました。

以下のコードは正常に動作します:

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);
于 2017-02-17T15:11:51.120 に答える