Pull to refresh

Comments 9

поскольку ffmpeg склеивал видео с транскодированием

Может вы просто не разобрались как его готовить? Все время клею/режу видео при помощи ffmpeg, именно из-за возможности сделать это без перекодирования.
Все мои попытки не увенчались успехом. Можете что-нибудь посоветовать?
В ffmpeg обычно одно и то же действие можно сделать даже несколькими способами. Конкретно про конкатенацию файлов есть здесь, например.
ffmpeg -i "concat:input1.mp4|input2.mp4|input3.mp4" -c copy output.mp4
Да, действительно работает и достаточно быстро. Единственное, нужно сначала транскодировать в mpeg, как показано в примере:
ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate1.ts
ffmpeg -i input2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate2.ts
ffmpeg -i "concat:intermediate1.ts|intermediate2.ts" -c copy -bsf:a aac_adtstoasc output.mp4

Спасибо! :)
Меня давно беспокоит один вопрос: возможно ли (и если да, то как именно) вести запись видео из одного источника (камеры) одновременно в два разных файла? Хоть бы и без всякой обработки.
Сам, увы, только собираюсь попробовать начать приступать осваивать андроид…
Почему волнует? Хочу понять, почему приложения-видеорегистраторы не записывают фрагменты с перекрытием во времени и по возможности решить эту проблему.
А для чего нужно перекрытие? Ни 1 кадра не теряется, смысло мало в этом имхо.

По вопросу записи сразу в 2 файла — да, почти из коробки.
Пишете вы в OutputStream, и по факту это может быть обертка под другие File или Memory OutputStream в любом количестве.
Возможно, я неверно сформулировал проблему… Попробую описать детальнее.
Все видеорегистраторы пишут видео фрагментами, чтобы по мере заполнения выделенного пространства на флешке перезаписывать (затирать) наиболее старые фрагменты, как наименее значимые. Однако ВСЕ известные на сегодня приложения-видеорегистраторы для андроид не делают перекрытие видеофрагментов ни на секунду, и даже наоборот, начало нового всегда запаздывает (на разное время — видимо, зависит от качества приложения и ресурсов системы, где оно работает). Таким образом возможна ситуация, когда авария произойдет в момент, когда один фрагмент уже закончен, а новый еще не начат, что для видеорегистратора крайне нежелательно. Поэтому все более-менее серьезные [аппаратные] видеорегистраторы пишут фрагменты с регулируемой перекрышей — от 1 до 5 секунд примерно. А вот программные андроид-регистраторы такой перекрыши не делают — я тестировал больше десятка приложений, ни одно так не умеет! Это недомыслие разработчиков или ограничение системы?
Я так понимаю, что проблема может крыться только в одном: камера, как источник видео, является разделяемым ресурсом или нет? Ранее в J2ME камера была полностью неразделяемым ресурсом, т.е. ее захватить можно было только один раз, иначе говоря, создать объект-камеру можно было только единожды, все остальные попытки приводили к падению приложения (или exception). Т.к. я с андроидом в плане софта не знаком, я и спрашиваю: возможно ли вторично создать объект-камеру и брать из нее видеопоток, направляя его в другой файл, в то время как видеопоток уже куда-то шел?
С проблемой потери кадров я не сталкивался, но описал способ, при котором можно писать в любой файл с любым перекрытием.
Камера пишет в стрим. То, что он обертка над 10 другими стримами никого не волнует. Она не выключается ине переподключается при создании нового файла, в этом нету смысла.
В целом, проблем быть не должно, если вы будете использовать MediaCodec и MediaMuxer. MediaCodec может работать все время, пока работает камера, а MediaMuxer можно к нему подключать «на лету» или же создавать сразу несколько.
Что касается камеры — она не разделяемый ресурс.
Sign up to leave a comment.

Articles