Как загрузить видео с телефона (n Android) во время записи

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

  1. Загружен полный видеофайл (но без moov atom или любых других данных, которые не записываются при первом проходе)
  2. Была загружена только часть видео (например, первые 10 секунд), и я хочу преобразовать его в действительный файл mp4, содержащий загруженный сегмент видео.

Я видел такие ссылки, как http://www.mattakis.com/blog/kisg/20090708/broadcasting-video-with-android-without-writing-to-the-file-system, но они замалчивают проблему, просто констатация

Таким образом, полученный поток должен быть исправлен после завершения записи, или необработанные видео/аудио кадры должны быть обработаны сервером.

не объясняя, как именно это сделать.


person velocipedestrian    schedule 22.04.2012    source источник


Ответы (1)


Как вы заметили, формат MP4 может быть труден для использования в таких ситуациях. Я подозреваю, что в связанном сообщении в блоге не содержится подробностей об «исправлении», потому что это может быть довольно сложно. В дополнение к написанию недостающего поля размера поля mdat вам потребуется сгенерировать поля ftyp и moov. Если вам действительно нужно комплексное решение для MP4, ISO 14496 -12 и ISO 14496-14 расскажет вам больше, чем вы когда-либо хотели знать о том, как создавать эти структуры данных.

Однако вы можете обнаружить, что гораздо более элегантным решением является использование формата, действительно подходящего для обработки в реальном времени. Другими словами, на стороне Android сделайте ремультиплексирование видеопотока в формат реального времени и отправьте его на сервер. На стороне сервера у вас появляется отличная гибкость для обработки видео: вы можете повторно преобразовать все видео в MP4, вы можете нарезать и нарезать, создавать 10-секундные фрагменты или что-то еще. Проект Sipdroid с открытым исходным кодом содержит некоторый код, демонстрирующий ремиксирование живого видео в RTP. (Вы можете предпочесть надежный формат передачи — RTP вместо TCP или любой другой — принцип тот же.)

person David Simmons    schedule 25.04.2012
comment
Спасибо за совет. Сейчас я смотрю на проект ipcamera-for-android, который использует FLV в качестве транспортного формата. Если я не смогу заставить этот проспект работать, я посмотрю на Sipdroid. - person velocipedestrian; 30.04.2012