2011-12-14 2 views
7

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

У меня есть RawImage, которая заполнена данными скриншоте:

RawImage mRawImage; 

До знаете, я использую SWT, чтобы создать изображение и сохранить его:

PaletteData paletteData = new PaletteData(
    mRawImage.getRedMask(), 
    mRawImage.getGreenMask(), 
    mRawImage.getBlueMask()); 

ImageData imageData = new ImageData(
    mRawImage.width, 
    mRawImage.height, 
    mRawImage.bpp, 
    paletteData, 
    1, 
    mRawImage.data); 

ImageLoader s = new ImageLoader(); 
s.data = new ImageData[] {imageData}; 
s.save("temp.jpg",SWT.IMAGE_JPEG); 
  • Может вам предложить способ конвертировать эти последовательности изображений в видео и , а затем передать видео?

Я нашел NanoHTTPD, который может использоваться для потоковой передачи, но как я могу конвертировать и сжимать изображения в видео?

  • Вы считаете, что я могу это сделать с помощью ffmpeg?

Я нашел хорошую Tutorial для потокового веб-камеры с помощью FFMPEG и video4linux2.

Можно ли отправить bytes из RawImage в FFMPEG для преобразования в живой видеопоток?

Фактический код:

$ffmpeg -f video4linux2 -i /dev/video0 http://78.47.18.19:8090/cam1.ffm 

Заменить его с чем-то подобным:

$ffmpeg -f video4linux2 -i **<add here java stream>** http://78.47.18.19:8090/cam1.ffm 

Любые предложения?

Благодаря

PS: Я ожидаю, что решение, которое поможет мне конвертировать изображения в сжатом видео, а затем потоковое видео по сети для того, чтобы воспроизвести его с любым HTML5 или Flash Player

+0

Hi Salamis, какова скорость, с которой вы будете захватывать статическое изображение? – Janvo

+0

5-10 кадров в секунду будет достаточно. – glarkou

+0

Привет, Саламис, я верю, что мой ответ ниже отвечает на ваши вопросы выше. Вам нужно будет убедиться, что захват на устройстве дает вам достаточно кадров в секунду для кодирования в видео (см. Параметр -r в ffmpeg). – Janvo

ответ

5

Есть два способа подойти к этому:

1) Захват, Encode и поток, и от самого устройства

или

2) Захват на устройстве, Encode и поток с сервера

Я не знаю, все ваши требования, но я бы предположить, что вариант 2 является маршрут идти. У вас будет более высокая производительность и расширенный набор инструментов для достижения конечной цели.

Capture Захват изображений JPEG практически точно так, как вы описываете. За исключением добавления индекса к каждому из них, чтобы у вас есть FILE1.JPG FILE2.JPG FILE3.JPG FILE4.jpg и т. Д.

Теперь, в зависимости от ваших требований, загрузите эти изображения на сервер.

Encode Использование mencode для установки скорости сжатия с потерями, как так:

mencoder "./*.jpg" -mf fps=5 -o yourvideo.avi -ovc lavc -lavcopts vcodec=msmpeg4v2:vbitrate=800

Как только это будет сделано, то вы можете использовать FFmpeg для создания MP4, как так:

ffmpeg -r 5 -b 1800 -i %01d.jpg yourvideo.mp4 

Streaming Теперь, чтобы передать поток mp4 по сети, я бы с Пуск в эксплуатацию веб-страницы, как:

http://myserver/androidStream 

который загружает вверх плейлист M3U, написанный динамически таким образом, что он всегда указывает на самую последнюю видео в потоке. В зависимости от используемого проигрывателя вы можете указать плейлист M3U в «следующий» плейлист M3U, который загрузит следующее видео. Вы также можете посмотреть альтернативные форматы плейлистов, такие как ASX или PLS, в зависимости от ваших требований.

См.: http://en.wikipedia.org/wiki/Advanced_Stream_Redirector и http://en.wikipedia.org/wiki/PLS_(file_format) в качестве примеров других форматов плейлистов, отличных от M3U.

Используя общие шаги, приведенные выше, вы будете иметь систему, в которой устройство будет захватывать изображения со скоростью n изображений в минуту, а затем загружать эти изображения на сервер для кодирования. После того, как эти изображения закодированы, вы можете напрямую передать фильм напрямую, ссылаясь на файл, или вы можете настроить плей-лист типа M3U, который позволит игроку перейти от «текущего» видео к «следующему» видео, когда оно доступно.

Смежные вопросы