2016-01-31 96 views
1

我正在開發具有HLS流的iOS應用程序。我正在使用AVPlayer playerWithURL播放視頻。有什麼方法可以從流或播放器中獲得實際的視頻尺寸(寬度和高度)?iOS中HLS的視頻寬度和高度

AVPlayerLayer videoRect返回視頻播放器層的視頻尺寸而不是實際視頻。

[_player.currentItem.asset tracksWithMediaType:AVMediaTypeVideo]返回此流媒體網址的零對象數組,以便我不能使用[track naturalSize]

是否有其他選項可以獲得視頻的寬度和高度?

+0

你已經解決了這一個? – DixieFlatline

回答

0

在HLS流式視頻的情況下,代碼不起作用。

[_player.currentItem.asset tracks]是一個空數組。

所以「[_player.currentItem.asset tracksWithMediaType: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); 
相關問題