Поточно видео от камера на устройство с Android

Опитвам се да създам приложение на Android, което предава поточно видео от камерата на устройството към сървър за поточно предаване.

Разгледах различни публикации и решения и ето текущото ми състояние с помощта на (използвах Sipdroid, jboss-netty и анализирах пакети на wireshark)

  1. Създадох RTSP стека и успешно се свързах със сървъра
    2.Мога теоретично да създам rtp пакет и да го изпратя на сървъра

Проблемът ми е в улавянето на рамката и изпращането на данните в RTP пакета. Имам 2 посоки:

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

2- Media recorder вече кодира данните и мога да задам кодирането, както е дефинирано в .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 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