【问题标题】:VideoToolBox Decoding image display is flickring in Yosemite OSXVideoToolBox 解码图像显示在 Yosemite OS X 中闪烁
【发布时间】:2017-10-13 05:17:46
【问题描述】:

我使用 videoToolBox 对数据进行编码和解码, 因此,一旦我们直接获得要解码的数据,我们就会传递给AVSampleBufferDisplayLayer

这里是代码sn-p

 -(CVPixelBufferRef)decode:(AVPacket*)vp {

    CVPixelBufferRef outputPixelBuffer = NULL;

    CMBlockBufferRef blockBuffer = NULL;
    OSStatus status  = CMBlockBufferCreateWithMemoryBlock(kCFAllocatorDefault,
                                                          (void*)vp->data, vp->size,
                                                          kCFAllocatorNull,
                                                          NULL, 0, vp->size,
                                                          0, &blockBuffer);


    //NSLog(@"status is for CMBlockBufferCreateWithMemoryBlock is %d",(int)status);
    if(status == kCMBlockBufferNoErr) {
        CMSampleBufferRef sampleBuffer = NULL;
        const size_t sampleSizeArray[] = {vp->size};
        status = CMSampleBufferCreateReady(kCFAllocatorDefault,
                                           blockBuffer,
                                           formatDesc ,
                                           1, 0, NULL, 1, sampleSizeArray,
                                           &sampleBuffer);
       // NSLog(@"status is for formatdesc is %d",(int)status);
        if (status == kCMBlockBufferNoErr && sampleBuffer) {
            CFArrayRef attachments = CMSampleBufferGetSampleAttachmentsArray(sampleBuffer, YES);
            CFMutableDictionaryRef dict = (CFMutableDictionaryRef)CFArrayGetValueAtIndex(attachments, 0);
            CFDictionarySetValue(dict, kCMSampleAttachmentKey_DisplayImmediately, kCFBooleanTrue);
            [displayLayer flush];
            if([displayLayer isReadyForMoreMediaData])
            {
                [displayLayer enqueueSampleBuffer:sampleBuffer];
            }

            [displayLayer setNeedsDisplay];

            [self performSelectorOnMainThread:@selector(setView:) withObject:[[RPCViewerAppInitializer sharedRPCViewerAppInitializer] rpcView] waitUntilDone:NO];
            CFRelease(blockBuffer);
            CFRelease(sampleBuffer);

        }
    }
    return outputPixelBuffer;
}

以上代码在 10.10 osx 中运行良好,但在 10.10 中我在屏幕上闪烁。

任何帮助都会很重要。

【问题讨论】:

  • 可以自己回答:)
  • 答案是什么?!在此处添加并将其标记为已回答!
  • 我将 AVSampleBufferDisplayLayer 的 controlTimebase 属性设置为 nil,这是原因,现在根本没有设置此属性

标签: objective-c cocoa avfoundation encode video-toolbox


【解决方案1】:

这个问题已经解决了:

我将 AVSampleBufferDisplayLayer 的 controlTimebase 属性设置为 nil,这是原因,现在根本没有设置此属性

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 2015-05-16
    相关资源
    最近更新 更多