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);
}