Прямая видеотрансляция между двумя телефонами Android

В настоящее время я работаю над потоковой передачей видео между двумя телефонами Android. Я написал приложение, которое может записывать видео в файл SD (используя MediaRecorder); и я написал еще одно приложение, которое может отображать видео из файла. Оба приложения работают отлично.

Я нашел веб-сайт о «Трансляции видео с Android — без записи в локальные файлы» на следующем веб-сайте. Это именно то, что я хотел сделать.

http://www.mattakis.com/blog/kisg/20090708/broadcasting-video-with-android-without-writing-to-the-file-system

Я изменил свой код.

Для видеорегистратора это:

socket=severSocket.accept();
ParcelFileDescriptor=pfd;
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
recorder.setVideoFrameRate(15);
recorder.setVideoSize(320, 240);
recorder.setPreviewDisplay(holder.getSurface());
pfd = ParcelFileDescriptor.fromSocket(socket);
recorder.setOutputFile(pfd.getFileDescriptor());
recorder.prepare(); 
recorder.start();

Для видеоплеера:

Socket socket = new Socket(IP,PORT);
mMediaPlayer = new MediaPlayer();
pfd = ParcelFileDescriptor.fromSocket(socket);
mMediaPlayer.setDataSource(pfd.getFileDescriptor()); // <-- here is the problem
mMediaPlayer.setDisplay(holder); 
mMediaPlayer.prepare();
mMediaPlayer.setOnBufferingUpdateListener(this);            
mMediaPlayer.setOnCompletionListener(this);            
mMediaPlayer.setOnPreparedListener(this);            
mMediaPlayer.setOnVideoSizeChangedListener(this);
mMediaPlayer.start();

Ошибка программы на mMediaPlayer.setDataSource(pfd.getFileDescriptor()); в MediaPlayer Я знаю, что неправильно настроил источник данных. Для помещения ParcelFileDescriptor в MediaPlayer необходимы дополнительные настройки.

Кто-нибудь знает, как использовать ParcelFileDescriptor для MediaPlayer? Любые полезные советы или подсказки были бы хороши......

Благодарю вас

Буду


person Will W    schedule 13.03.2011    source источник
comment
У вас получилось?   -  person B770    schedule 19.08.2013
comment
это работает для вас? если работает, подскажите плиз как решить эту проблему.   -  person Aravi    schedule 10.12.2013
comment
Я хотел бы знать, если вы поняли это слишком. у меня точно такая же проблема и ответ ниже не помогает   -  person steveh    schedule 05.07.2014


Ответы (2)


на стороне воспроизведения видео вы должны создать приветственный сокет

ServerSocket welcomeSocket = new ServerSocket(portNumber);
socket soc = welcomeSocket.accept();

и использовать

mMediaplayer.prepareAsync();

вместо

mMediaplayer.prepare();
person Community    schedule 02.12.2011
comment
привет, кажется, вы установили только номер порта, как насчет IP-адреса хоста? - person Albert Chen; 01.01.2015

Android изначально не поддерживает потоковое видео в Android 2.1 или более ранних версиях. Что мы сделали, так это получили изображения кадр за кадром; и разбейте каждое пламя на BYTE[] и отправьте, используя класс Socket. А на стороне получателя мы перестраиваем изображения, используя BYTE[] полученных данных.

person Will W    schedule 03.05.2011