VToolBox可以在IOS上运行后台吗?

时间:2015-12-10 07:57:56

标签: ios iphone h.264 hardware-acceleration

我想用VToolBox压缩一些数据。当我在前台运行我的应用程序时,它运行良好,但是当我在后台运行我的应用程序时,它不再提供压缩数据......

我在编码开始时添加了日志:

- (void) encode1:(CMSampleBufferRef )sampleBuffer  wrapTs:(UInt64)ts;
{
    dispatch_sync(aQueue, ^{

    frameCount++;
    // Get the CV Image buffer
    CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);

    // Create properties
    CMTime presentationTimeStamp = CMTimeMake(frameCount, 1000);
    //CMTime duration = CMTimeMake(1, DURATION);
    VTEncodeInfoFlags flags;

    //NSLog(@"encode sessino status:%d", EncodingSession==nil? 0:1);
    // Pass it to the encoder
    OSStatus statusCode = VTCompressionSessionEncodeFrame(EncodingSession,
                                                          imageBuffer,
                                                          presentationTimeStamp,
                                                          kCMTimeInvalid,
                                                          NULL, (__bridge void*)@(ts), &flags);

    NSLog(@"hardware compress result: %d", (int)statusCode);
    // Check for error
    if (statusCode != noErr) {

并在压缩回调中:

void didCompressH264(void *outputCallbackRefCon, void *sourceFrameRefCon, OSStatus status, VTEncodeInfoFlags infoFlags,
CMSampleBufferRef sampleBuffer ){
   //get outside stamp
   UInt64 pp = [((__bridge NSNumber*)sourceFrameRefCon) longLongValue];

   NSLog(@"didCompressH264 status:%d", status);
   if (status != 0) return;

   if (!CMSampleBufferDataIsReady(sampleBuffer))
   {
      NSLog(@"didCompressH264 data is not ready ");
      return;
   }

当我在后台运行应用程序时,我可以看到日志"硬件压缩结果:0"这意味着将数据放入VToolBox中,但我无法获得log" didCompressH264 status"。

它似乎永远不会达到didCompressH264功能。

所以,我想知道VToolBox是否可以在后台运行?如果是这样,怎么样?任何答案都表示赞赏!

2 个答案:

答案 0 :(得分:0)

iOS不会让你的应用永远在后台运行。默认情况下,在应用程序移至后台后,它将为您提供几秒钟的运行时间。除此之外,它将阻止应用程序运行或杀死它。

您可以在AppDelegate的beginBackgroundTaskWithName:expirationHandler:方法中使用applicationDidEnterBackground:要求更多时间。您可以查看iOS为您提供的backgroundTimeRemaining多长时间。除此之外,你的应用程序将被杀死。

请注意,相当多的事情在后台不起作用。不确定库使用了哪些资源,但是如果你在后台完全访问GPU,我会感到惊讶。

答案 1 :(得分:0)

只要您的应用进入背景,VideoToolbox就会停止解压缩/压缩帧。仅在前台应用程序上允许硬件加速以提供最佳体验。