Потоковое видео с камеры Android-устройства

Я пытаюсь создать приложение на Android, которое передает видео с камеры устройства на потоковый сервер.

Я просмотрел разные сообщения и решения, и вот мое текущее состояние с помощью (я использовал Sipdroid, jboss-netty и анализировал пакеты на wireshark)

  1. Я построил стек RTSP и успешно подключился к серверу
    2. Теоретически я могу создать rtp-пакет и отправить его на сервер

Моя проблема заключается в захвате кадра и отправке данных в пакете RTP. У меня есть 2 направления:

1- Используйте камеру и AuidoRecorder для захвата необработанных данных мультимедиа и отправки их с использованием rtp, проблема в том, должны ли эти данные быть закодированы в соответствии с описанием файла .sdp в ОБЪЯВЛЕНИИ RTSP ??? как я понимаю, данные с камеры и микрофона будут необработанными данными, которые не закодированы. Другой вопрос, как я могу правильно сформулировать эти необработанные данные в пакете RTP.

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

Мой вопрос в том, что я слишком усложняю ситуацию, достаточно ли отправлять необработанные данные видео и аудио в пакетах RTP, а потоковый сервер будет обрабатывать все остальное ???? Пожалуйста, я был бы признателен за любую помощь и руководство в этом вопросе.

Спасибо


person ekoshairy    schedule 17.07.2011    source источник
comment
Вы можете инициировать соединение по сотовой связи? Если да, то как вы решили проблему блокировки всех входящих портов на телефоне?   -  person michael    schedule 04.01.2012
comment
Вы нашли решение?   -  person Derzu    schedule 31.10.2012


Ответы (1)


Во-первых, вы должны закодировать свои данные, как это описано в файле .sdp. Хотели бы вы попробовать MediaRecorder вместо AuidoRecord? MediaRecorder позволяет вам установить кодировку получаемых данных.

Кроме того, я предлагаю вам создать FileDescriptor с помощью сокета, чтобы данные можно было передавать через поток сокетов, а не статический файл. Код может понравиться:

Socket socket = new Socket(serverAddr, serverPort);
socket.setTcpNoDelay(true);
ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket);
Camera camera = Camera.open();
camera.unlock();
MediaRecorder recorder = new MediaRecorder();
recorder.setCamera(camera);
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
recorder.setOutputFile(pfd.getFileDescriptor());
recorder.setPreviewDisplay(surfaceView.getHolder().getSurface());
recorder.setVideoFrameRate(15);
recorder.setVideoSize(480, 320);
recorder.prepare();
recorder.start();

Способ транспортировки в RTP - это то, что меня сейчас беспокоит.

person shawn    schedule 02.03.2012
comment
как воспроизводить видео или аудио из ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket); mediaPlayer.setDataSource(pfd.getFileDescriptor()); у меня это не сработало. Это показывает, что невозможно создать медиаплеер. Что мне делать? - person Aravi; 10.12.2013