如何检查AVPlayer是否有视频或只是音频?

问题描述 投票:5回答:3

我尝试播放一些“媒体”,但在AVPlayer启动的时候,我不知道它是音频还是视频。

我连接了播放器图层,它工作正常。

self.avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:[[PCPlayerManager sharedManager] audioPlayer]];
avPlayerLayer.videoGravity = AVLayerVideoGravityResizeAspect;
avPlayerLayer.frame = CGRectMake(0, 0, videoView.frame.size.width, videoView.frame.size.height);
[videoView.layer addSublayer:avPlayerLayer];

但是,我如何检查是否有视频,以便我可以添加/删除一些选项?

xcode audio video avplayer
3个回答
7
投票

来自Apple的示例代码项目AVSimplePlayer:

// Set up an AVPlayerLayer according to whether the asset contains video.
if ([[(AVAsset *)asset tracksWithMediaType:AVMediaTypeVideo] count] != 0)

2
投票

我不确定,但AVPlayerItem有以下数组[mPlayerItem.asset.tracks]这包含两个对象,一个用于视频,另一个用于音频。访问如下[mPlayerItem.asset.tracks objectAtIndex:0]用于视频和[mPlayerItem.asset.tracks objectAtIndex:1]用于音频。


0
投票

对于Swift 4.2,您可以执行以下操作:

func isAudioAvailable() -> Bool? {
   return self.player?._asset?.tracks.filter({$0.mediaType == AVMediaType.audio}).count != 0   
}

func isVideoAvailable() -> Bool? {
   return self.player?._asset?.tracks.filter({$0.mediaType == AVMediaType.video}).count != 0   
}

或作为扩展名

extension AVPlayer {
    var isAudioAvailable: Bool? {
        return self._asset?.tracks.filter({$0.mediaType == AVMediaType.audio}).count != 0
    }

    var isVideoAvailable: Bool? {
        return self._asset?.tracks.filter({$0.mediaType == AVMediaType.video}).count != 0
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.