Я пытаюсь заставить фильтрацию видео работать

Я пробовал примеры из библиотеки GPUImage. Я попробовал «SimpleVideoFileFilter», но все, что я вижу, это черный экран с ползунком. Я пытался сделать то же самое сам, у меня все работало идеально. но я не могу понять процесс видео. примеры берут видео из самого проекта? папка с мака? или это из видео с айфона? У меня нет учетной записи Apple Developer, поэтому я не могу протестировать ее на своем устройстве. Я нашел способ поместить случайный (.m4v) файл в симулятор iPhone и попытался воспроизвести / отфильтровать видео.

у кого-нибудь была эта проблема? Я пока пытаюсь просто воспроизвести видео из симулятора iPhone или файлов ресурсов. Я действительно не знаю, где это работает. Я попробовал эту ссылку, но безуспешно.

Вот часть примера, который мы можем найти в GPUImage:

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSURL *sampleURL = [[NSBundle mainBundle] URLForResource:@"sample_iPod" withExtension:@"m4v"];

    movieFile = [[GPUImageMovie alloc] initWithURL:sampleURL];
    movieFile.runBenchmark = YES;
    movieFile.playAtActualSpeed = YES;
    filter = [[GPUImagePixellateFilter alloc] init];
  //  filter = [[GPUImageUnsharpMaskFilter alloc] init];

    [movieFile addTarget:filter];

    // Only rotate the video for display, leave orientation the same for recording
    GPUImageView *filterView = (GPUImageView *)self.view;
    [filter addTarget:filterView];

    // In addition to displaying to the screen, write out a processed version of the movie to disk
    NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/TestMovie.m4v"];
    unlink([pathToMovie UTF8String]); // If a file already exists, AVAssetWriter won't let you record new frames, so delete the old movie
    NSURL *movieURL = [NSURL fileURLWithPath:pathToMovie];

    movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(640.0, 480.0)];
    [filter addTarget:movieWriter];

    // Configure this for video from the movie file, where we want to preserve all video frames and audio samples
    movieWriter.shouldPassthroughAudio = YES;
    movieFile.audioEncodingTarget = movieWriter;
    [movieFile enableSynchronizedEncodingUsingMovieWriter:movieWriter];

    [movieWriter startRecording];
    [movieFile startProcessing];

    [movieWriter setCompletionBlock:^{
        [filter removeTarget:movieWriter];
        [movieWriter finishRecording];
    }];
}

простой код, который должен фильтровать видео .. все, что я получаю оттуда, это черный экран с ползунком ..

Я говорю об этом этом проекте.


person Ido    schedule 12.11.2013    source источник
comment
Опубликуйте код о конкретной проблеме, с которой вы столкнулись, пожалуйста.   -  person ryan cumley    schedule 12.11.2013
comment
Я добавил немного кода и больше деталей.   -  person Ido    schedule 12.11.2013


Ответы (1)


Воспроизведение фильма в настоящее время не работает в симуляторе с использованием GPUImage. Вам нужно будет запустить это на реальном устройстве, чтобы эта работа работала.

Я не уверен, почему файлы фильмов ничего не выводят при запуске из симулятора, но вы можете покопаться в коде GPUImageMovie и посмотреть, что может быть не так. Поскольку он работает нормально при работе на реальном оборудовании, это не было моей приоритетной задачей.

person Brad Larson    schedule 14.11.2013
comment
Да, код в основном создает видеофайл в папке приложения. некоторые фильтры в правильном разрешении для iPhone 4 очень замедляют воспроизведение видео. Можем ли мы что-то с этим сделать? - person Ido; 15.11.2013
comment
@Ido - Что ж, производительность операций фильтрации будет зависеть от используемых фильтров, размера видео и т. Д. Некоторые фильтры работают медленнее на iPhone 4, потому что у него нет такой мощности графического процессора, как у 4S и выше. Запись видео на этом устройстве также происходит медленнее, опять же из-за аппаратных ограничений обработки. - person Brad Larson; 15.11.2013