Создание пакетов RTP с камеры Android для отправки - PullRequest
18 голосов
/ 07 сентября 2011

Я новичок в Android и программировании сокетов.Я хочу создать приложение для Android, которое передает видео в реальном времени с камеры устройства на ПК.Сначала я получаю необработанные видеоданные из аргументов PreviewCallback и преобразую их в пакет RTP.Я просто использовал JLibRTP для этого.Что касается передачи пакета, я думаю, что есть несколько связанных классов: RtpPkt, RtpSession и RtpSocket.

Вот мой код взгляда:

DatagramSocket rtpSocket = new DatagramSocket();
DatagramSocket rtcpSocket = new new DatagramSocket();
RtpSession rtpSession = new RtpSession(rtpSocket, rtcpSocket);

public void surfaceCreated(SurfaceHolder holder) {
    try {
            camera = Camera.open();
            camera.setPreviewCallback(new PreviewCallback() {
                public void onPreviewFrame(byte[] _data, Camera _camera) {
                int height = 240;
                    try {
                        rtps.sendData(_data);
                     } catch (Exception e) {
                        e.printStackTrace();
                        Toast.makeText(getApplicationContext(), e.toString(),
                        Toast.LENGTH_SHORT).show();
                    }
                }
            });
            camera.setPreviewDisplay(holder);
            camera.startPreview();
    } catch (IOException e) {
            Log.d("CAMERA", e.getMessage());
    }
}

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

1 Ответ

5 голосов
/ 07 сентября 2011

Я не знаю, содержит ли эта библиотека что-то для потоковой передачи пакетов на ПК, но если нет, то у вас проблема, потому что Android поддерживает только потоковую передачу RTP начиная с версии 3.1 (уровень API 12).если ваш уровень ниже, вы должны написать свой собственный «rtp-сервер», который может передавать пакеты с вашего устройства на ПК.

для получения дополнительной информации ознакомьтесь с проектом sipdroid.они создали свой собственный "rtp-сервер": http://code.google.com/p/sipdroid/source/browse/trunk/src/org/sipdroid/sipua/ui/VideoCamera.java

ОБНОВЛЕНИЕ:

другая возможность - использовать ffserver из библиотек ffmpeg, но, следовательно,скомпилировать библиотеки для android.Вот небольшой учебник, как это сделать и как работать с библиотеками: Как собрать FFmpeg для Android

UPDATE2:

spydroid application - очень хороший пример для потоковой передачи видео с устройства Android без каких-либо внешних библиотек.

...