AVPlayerItemOutput 像素类型格式

问题描述

我正在尝试将 AVPlayerItemVideoOutput 添加到 IOS AVPlayer。

  -(void)addOutput:(AVPlayerItem*) playerItem{
        if(self.videoOutput != nil){
            [playerItem removeOutput:self.videoOutput];
        }
        
        CGSize size = [self setupSize];
        NSDictionary *outputSettings = @{
                   (id)kCVPixelBufferPixelFormatTypeKey: @(kCVPixelFormatType_32ARGB),(id)kCVPixelBufferWidthKey: @(size.width),(id)kCVPixelBufferHeightKey: @(size.height),(id)kCVPixelBufferExtendedPixelsLeftKey:@(0),(id)kCVPixelBufferExtendedPixelsTopKey:@(0),(id)kCVPixelBufferExtendedPixelsRightKey:@(0),(id)kCVPixelBufferExtendedPixelsBottomKey:@(0),};
    
        self.videoOutput = [[AVPlayerItemVideoOutput alloc] initWithPixelBufferAttributes:outputSettings];
        [playerItem addOutput:self.videoOutput];
    }

播放器接收带有编解码器 h264(始终相同)的 mp4 文件。 输入文件像素格式始终为 kCVPixelFormatType_32BGRA。 然后我从播放器输出中读取帧

 if(![self.videoOutput hasNewPixelBufferForItemTime:time]){
        return nil;
    }
    CVPixelBufferRef pixelBuffer = [self.videoOutput copyPixelBufferForItemTime: time itemTimeFordisplay:nil];
    if(!pixelBuffer){
        return nil;
    }
    return pixelBuffer;

结果是,当我在 iPhone 上读取缓冲区时,它的像素类型总是与输入文件中的相同 - kCVPixelFormatType_32BGRA。 但是在 iPad 上 videoOutput 没有返回帧,而是在我设置 kCVPixelFormatType_32ARGB 这种格式时返回帧。 我做了下一个 hack 来修复它,只是根据 iPhone/iPad 更改设置,但这并不是很好的解决方案。也许有更好的解决方案,如何只从播放器接收特定的像素类型?

  NSDictionary *outputSettings = @{
               (id)kCVPixelBufferPixelFormatTypeKey: @(kCVPixelFormatType_32BGRA),};

    if(UIDevice.isIpad){
        outputSettings = @{
                   (id)kCVPixelBufferPixelFormatTypeKey: @(kCVPixelFormatType_32ARGB),};
 

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)