2016-04-13 10 views
3

ios(OBJECTIVE-C)のAVPlayerを使用してカスタムビデオプレーヤーを作成しています。設定ボタンがあり、クリックすると利用可能なビデオサイズとオーディオフォーマットが表示されます。以下 はデザインです:iOSの動画URLから利用可能な動画サイズ/品質を取得するにはどうすればよいですか?

enter image description here

ので、私が知りたい:

1)動画のURL(ないローカルビデオ)から入手可能な寸法を得るために.How?

2)。次元を取得できても、AVPlayerで再生中に使用可能なディメンションを切り替えることはできますか?

誰でも私にヒントを与えることができますか?

答えて

1

ローカルビデオではないことに言及したように、一部のWebサービスを呼び出して、その特定のビデオの利用可能なビデオサイズを返すことができます。その後、他の利用可能なビデオへのURLを変更し、現在の位置にシークします。

Refer This

+0

おかげで、.ActuallyのiOSは自動的に私はguess.Butネットワーク速度に基づいて、それらを処理する利用可能異なる解像度があるかもしれませんそれらのデータを取得してそれらの間で切り替えることができるかどうかを尋ねています。私は単一のビデオURLについて話しています。異なるストリームが単一のURLで利用可能かもしれません。 – abhi1992

4

それは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ビデオのために、上記のコードは動作しません。 私はこれを別の方法で解決しました。 ビデオを再生したとき、ビデオからイメージを取得し、その解像度を計算しました。ここで

はサンプルコードです:HLSの動画の場合はresponse.Butため

// 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); 
} 
+0

YouTubeのようにストリームを切り替えるのはどうですか? – abhi1992

関連する問題