AVAssetWriter - визуализировать одно изображение за 10 секунд

Пробую это:

int frameCount = 30*10;
    for(int i = 0; i<frameCount; i++)
    {
        while (!append_ok && j < 30)
        {
            if (self.adaptor.assetWriterInput.readyForMoreMediaData)
            {

                CMTime frameTime = CMTimeMake(i,(int32_t) 10);

                NSLog(@"frameTime %f", CMTimeGetSeconds(frameTime));

                append_ok = [self.adaptor appendPixelBuffer:buffer withPresentationTime:frameTime];
                if(!append_ok){
                    NSError *error = self.assetWriter.error;
                    if(error!=nil) {
                        NSLog(@"Unresolved error %@,%@.", error, [error userInfo]);
                    }
                }

                [NSThread sleepForTimeInterval:0.05];
            }
            else
            {
                printf("adaptor not ready %d", j);
                [NSThread sleepForTimeInterval:0.1];
            }
            j++;
        }
        if (!append_ok)
        {
            printf("error appending image times %d\n", j);
        }
        CVBufferRelease(buffer);
    }

Но я получаю эту ошибку:

MyApp (11658,0x3a98218c) malloc: * ошибка для объекта 0x1782c690: двойное освобождение

Я просто хочу создать видео продолжительностью 10 секунд, используя одно изображение.

1 ответ

Я знаю, что ты чувак боли, у меня есть подобный метод, чтобы работать для меня, используя один кадр с одним изображением в течение определенной продолжительности в соответствии с аудиофайлом (в CMTime). Попробуйте это (отредактировал ваш код):

int frameCount = 1;
for(int i = 0; i<frameCount; i++)
{
    while (!append_ok && j < 30)
    {
        if (self.adaptor.assetWriterInput.readyForMoreMediaData)
        {

            CMTime frameTime = CMTimeMake(10, 1); //10 seconds

            NSLog(@"frameTime %f", CMTimeGetSeconds(frameTime));

            append_ok = [self.adaptor appendPixelBuffer:buffer withPresentationTime:frameTime];
            if(!append_ok){
                NSError *error = self.assetWriter.error;
                if(error!=nil) {
                    NSLog(@"Unresolved error %@,%@.", error, [error userInfo]);
                }
            }

            [NSThread sleepForTimeInterval:0.05];
        }
        else
        {
            printf("adaptor not ready %d", j);
            [NSThread sleepForTimeInterval:0.1];
        }
        j++;
    }
    if (!append_ok)
    {
        printf("error appending image times %d\n", j);
    }
    CVBufferRelease(buffer);
}
Другие вопросы по тегам