ManyWork
  • Войти в систему
  • Зарегистрироваться
  • Проекты
  • Услуги
  • Фрилансеры
  • Команды
  • Курсы
  • Форум
  • Контакты
    • Стиль заголовка
    • Светлый Темный
    • Стиль страницы
    • Фон Обычный
    • Main Layout
    • Цветовая схема
    • по умолчанию
  • Партнерская программа обновление
  • Опубликовать задание

код на ObjC для OSX для извлеченя кадров из видео

  • Главная
  • Проекты
  • код на ObjC для OSX для извлеченя кадров из видео
Хотите добавить свое задание на разработку сайта, дизайна, интернет-магазина или прочей работы?

Нужно написать функции-обертки, который будет использован для извлечения всех кадров из видео, под Mac OS 10.7 и выше.

Нужно использовать AVFoundation (именно AVFoundation, QTKit & QuickTime не подходят!).
Код однопоточный, наше приложение с интерфейсом командной строки (то есть никакого GUI нет).

О том как читать кадры с видео – см пример от Apple:
developer.apple.com/libra...
Файл Objective-CAVReaderWriterOSXAAPLDocument.m

Писать на Objective-C++ или Objective-C (но не на свифте!).


Нужно реализовать такие функции:
---------------------------
int setup_movie(char* fnm /* file name in utf8 */,
int maxwidth = 100 /* width of output picture */);
/*
Изоображения каждого извлеченного кадра должно иметь ширину maxwidth(а высоту – вычислить исходя из пропорций видеоролика). Для этого у AVFoundation есть свойства, которые раз и навсегда указывают размер выходного изображения.
*/


double _get_framerate(); //frames per second, as double, e.g. 25
double _get_duration(); //duration in seconds, e.g. 12.4

void set_current_time(double attime); //go to time in seconds
void get_next_frame_image(frame_norm_t* outbuf); /* извлекает изображение следующего кадра в outbuf. В отладочном режиме оно также должно писать его в графический файл с именем "curimage" любого выбранного ВАМИ формата (png/jpg/bmp)  в текущем каталоге. Это чтобы мы могли убедиться что ваш код действительно работает */

double _get_curtime(); //current time in seconds (for frame that will be read next in sequence)

void cleanup_movie();

void set_debug_mode(bool is_debug); /* см описание get_next_frame_image.  */


-----------------------------

Содержимое кадров должно браться используя функцию generateCGImagesAsynchronouslyForTimes
- то есть  надо организовать очередь из содержимых кадров, заполнять ее используя 
generateCGImagesAsynchronouslyForTimes для 30 следующих кадров, и по мере поступающих вызовов
get_next_frame_image опустошать ее.

developer.apple.com/libra...

Пискелы должны браться в формате kCVPixelFormatType_32RGBA (в примере выше они берутся в формате
kCVPixelFormatType_32ARGB, просто замените константу в коде на kCVPixelFormatType_32RGBA).

Формат outbuf объясним выбранным исполнителям, в двух словах это просто массив из 32-битных 
величин, под одной для каждого пиксела.

Наш код работает с одним видео за жизнь приложения, так что все состояние (например, все
указатели на структуры, описывающие видео), пусть храняться в глобальных переменных.

Наш код однопоточный, так что всякими синхронизациями, семафорами и мутексами можно не 
заморачиваться.

То есть вот примерный код нашего приложения, и как он будет вызывать функции, которые вы должны реализовать:

setup_movie("/tmp/1.mp4");
//потом узнаем свойства видео, решает что делать
_get_framerate();
_get_duration();

//потом переходим к нужному нам времени
set_current_time(fromtime);

while (_get_curtime() <  totime)
{
get_next_frame_image(buf); //далее в цикле перебираем все кадры как можно быстрее
}
cleanup_movie();

exit(0); // то есть setup_movie будет вызываться 1 раз за жизнь программы


Чтобы оставить свое предложение необходимо войти в систему!

Информация

Отклики 0
Размещено 20.02.2016 в 13:36
По договоренности

Автор публикации

avatar Сео
seomw

Поделиться

© MANYWORK.RU

Settings

Vital Info

Admin

Password Update