Потоковое видео с камеры устройства Android - PullRequest
2 голосов
/ 17 июля 2011

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

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

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

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

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

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

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

Спасибо

1 Ответ

1 голос
/ 02 марта 2012

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

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

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 - вот что меня беспокоит сейчас.

...