에 다음과 같은 설정이 iOS10 때까지 모든 최근 아이폰 OS 버전에서 일하고있다 : 나는 정의 소스에서 원시 프레임을 렌더링하는 데 AVSampleBufferDisplayLayer
을 사용하고AVSampleBufferDisplayLayer 렌더링되지 않는 프레임 이상 iOS10
.
픽셀 버퍼 풀을 CVPixelBufferPoolCreate
으로 설정하고 kCVPixelBufferIOSurfacePropertiesKey
을 Apple에서 지시 한대로 @{}
으로 설정했습니다.
CVPixelBufferPoolCreatePixelBuffer
을 사용하여 풀에서 픽셀 버퍼를 얻은 다음 CVPixelBufferLockBaseAddress
및 CVPixelBufferUnlockBaseAddress
을 사용하여 데이터를 버퍼에 복사합니다.
내 원시 프레임은 NV12 형식 kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange
을 사용합니다. 여기
CMSampleBufferRef
상기 픽셀 버퍼를 변환하고 디스플레이 층에 대기열 방법을 나타내는 코드이다
CMSampleTimingInfo sampleTimeinfo{
CMTimeMake(duration.count(), kOneSecond.count()),
kCMTimeInvalid,
kCMTimeInvalid};
CMFormatDescriptionRef formatDescription = nullptr;
CMVideoFormatDescriptionCreateForImageBuffer(nullptr, pixelBuffer, &formatDescription);
CMSampleBufferRef sampleBuffer = nullptr;
CMSampleBufferCreateForImageBuffer(
nullptr, pixelBuffer, true, nullptr, nullptr, formatDescription, &sampleTimeinfo, &sampleBuffer));
CFArrayRef attachmentsArray = CMSampleBufferGetSampleAttachmentsArray(sampleBuffer, YES);
const CFIndex numElementsInArray = CFArrayGetCount(attachmentsArray);
for (CFIndex i = 0; i < numElementsInArray; ++i) {
CFMutableDictionaryRef attachments = (CFMutableDictionaryRef)CFArrayGetValueAtIndex(attachmentsArray, i);
CFDictionarySetValue(attachments, kCMSampleAttachmentKey_DisplayImmediately, kCFBooleanTrue);
}
if ([avfDisplayLayer_ isReadyForMoreMediaData]) {
[avfDisplayLayer_ enqueueSampleBuffer:sampleBuffer];
}
CFRelease(sampleBuffer);
CFRelease(formatDescription);
pixelBuffer
CVPixelBufferRef
이다 및
avfDisplayLayer_
AVSampleBufferDisplayLayer
.
avfDisplayLayer_ = [[AVSampleBufferDisplayLayer alloc] init];
avfDisplayLayer_.videoGravity = AVLayerVideoGravityResizeAspectFill;
내가 경고 또는 오류 메시지를 받고 있지 않다, 디스플레이 층 상태가 실패를 표시하지 않고 isReadyForMoreMediaData
사실 반환 :
이 다음 조각
내가 디스플레이 층을 구성하는 방법을 보여줍니다.내 프레임이 화면에 나타나지 않는 것이 문제입니다. 또한 레이어가 올바르게 합성되었는지 확인하기 위해 표시 레이어에 배경색을 설정했습니다.
뭔가가 AVSampleBufferDisplayLayer 관련하여 iOS10 변경해야합니다,하지만 난 그것이 무엇인지 알아낼 수 없습니다입니다.
애플 리케이션에도이 문제가 있습니다. 따라서 Apple에 버그 보고서를 제출하고 정보를 OpenRadar에 복사했습니다. https://openradar.appspot.com/radar?id=5001147395866624 –