菜鸟教程小白 发表于 2022-12-12 09:46:59

iOS画屏视频采集不流畅


                                            <p><p>我正在创建一个应用程序,我们可以在其中使用手指在 imageView 中进行绘制,同时我们还可以记录屏幕。
目前我已经完成了这些功能,但问题是一旦视频录制完成,如果我们播放录制的视频,视频中的手指绘制不流畅。</p>

<p>我没有使用 opengl,绘图在 UIImageView 上,每 0.01 秒我们从 UIImageView 捕获图像并将像素缓冲区附加到 AVAssetWriterInputPixelBufferAdaptor 对象。</p>

<p>这是我用于将 UIImage 转换为缓冲区的代码</p>

<pre><code>- (CVPixelBufferRef) pixelBufferFromCGImage:(CGImageRef) image {

CGSize frameSize = CGSizeMake(976, 667);
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                         , kCVPixelBufferCGImageCompatibilityKey,
                         , kCVPixelBufferCGBitmapContextCompatibilityKey,
                         nil];
CVPixelBufferRef pxbuffer = NULL;
CVPixelBufferCreate(kCFAllocatorDefault, frameSize.width,
                                    frameSize.height,kCVPixelFormatType_32ARGB, (__bridge CFDictionaryRef) options,
                                    &amp;pxbuffer);
CVPixelBufferLockBaseAddress(pxbuffer, 0);
void *pxdata = CVPixelBufferGetBaseAddress(pxbuffer);

CGColorSpaceRef rgbColorSpace = CGImageGetColorSpace(image);

CGContextRef context = CGBitmapContextCreate(pxdata, frameSize.width,
                                             frameSize.height, 8, 4*frameSize.width, rgbColorSpace,
                                             kCGImageAlphaPremultipliedFirst);

CGContextDrawImage(context, CGRectMake(0, 0, CGImageGetWidth(image),
                                       CGImageGetHeight(image)), image);

CGContextRelease(context);

CVPixelBufferUnlockBaseAddress(pxbuffer, 0);
return pxbuffer;
</code></pre>

<p>}</p>

<p>下面的方法是以 0.01 秒的时间间隔调用的</p>

<pre><code>CVPixelBufferRef pixelBufferX= (CVPixelBufferRef);
bValue = ;
</code></pre>

<p>任何人都可以指导改进视频捕获吗?</p>

<p>提前致谢</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您不应该通过每 0.01 秒调用一次来显示内容。如果您想与视频保持同步,请参阅 <code>AVSynchronizedLayer</code>,这是明确的。或者,请参阅 <code>CADisplayLink</code>,它用于与屏幕刷新保持同步。 0.01 秒与任何特别的东西都不相符,并且您可能会在与视频和显示器不同步的地方获得节拍。在任何情况下,您都应该在播放器的回调中进行绘图,而不是使用计时器。</p>

<p>您还会在每个循环中泄漏像素缓冲区。由于您调用了 <code>CVPixelBufferCreate()</code>,因此您有责任最终在生成的像素缓冲区上调用 <code>CFRelease()</code>。如果运行一段时间,我希望您的程序最终会因内存不足而崩溃。</p>

<p>确保您已经学习了 <a href="https://developer.apple.com/library/ios/#documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/00_Introduction.html" rel="noreferrer noopener nofollow">AV Foundation Programming Guide</a>这样您就知道所有部分在媒体播放中是如何组合在一起的。</p></p>
                                   
                                                <p style="font-size: 20px;">关于iOS画屏视频采集不流畅,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/15501206/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/15501206/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iOS画屏视频采集不流畅