IOS硬件解码VTDecompressionSession失效

    xiaoxiao2021-03-25  105

    原文:http://blog.5ibc.net/p/33817.html

    编码、解码失效都可以restart一下。

    IOS硬件解码VideoToolbox在应用中进入后台VTDecompressionSession失效解决办法

    *前段时间在IOS上用VideoToolbox进行视频播放器硬件解码时遇到一个问题,就是播放器进入进入到后台后再切换回来会导致VTDecompressionSession直接失效,这个问题纠结了很久,后来终于找到解决办法了,直接重新初始化session,下面展示一段示例代。  参考链接  http://www.zhihu.com/question/20692215  引用了stevenyao/iOSHardwareDecoder · GitHub的代码,这段代码里面没有对session失效了进行处理,我在里面加了下面这段处理,就可以了。

    - (void)resetH264Decoder { if(_deocderSession) { VTDecompressionSessionInvalidate(_deocderSession); CFRelease(_deocderSession); _deocderSession = NULL; } CFDictionaryRef attrs = NULL; const void *keys[] = { kCVPixelBufferPixelFormatTypeKey }; // kCVPixelFormatType_420YpCbCr8Planar is YUV420 // kCVPixelFormatType_420YpCbCr8BiPlanarFullRange is NV12 uint32_t v = kCVPixelFormatType_420YpCbCr8BiPlanarFullRange; const void *values[] = { CFNumberCreate(NULL, kCFNumberSInt32Type, &v) }; attrs = CFDictionaryCreate(NULL, keys, values, 1, NULL, NULL); VTDecompressionOutputCallbackRecord callBackRecord; callBackRecord.decompressionOutputCallback = didDecompress; callBackRecord.decompressionOutputRefCon = NULL; if(VTDecompressionSessionCanAcceptFormatDescription(_deocderSession, _decoderFormatDescription)) { NSLog(@"yes"); } OSStatus status = VTDecompressionSessionCreate(kCFAllocatorSystemDefault, _decoderFormatDescription, NULL, attrs, &callBackRecord, &_deocderSession); CFRelease(attrs); }

    然后在遇到session失效时调用

    if(decodeStatus == kVTInvalidSessionErr) { NSLog(@"IOS8VT: Invalid session, reset decoder session"); [self resetH264Decoder]; }

    转载请注明原文地址: https://ju.6miu.com/read-10217.html

    最新回复(0)