Live Video Stream между двумя телефонами 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
Я знаю, что я не правильно настроил DataSource. Для размещения в MediaPlayer должны быть дополнительные настройки для ParcelFileDescriptor.
Кто-нибудь знает, как использовать ParcelFileDescriptor для MediaPlayer?
Любые полезные советы или советы будут приятными......
Спасибо
Воля
Ответы
Ответ 1
на стороне воспроизведения видео
вы должны создать приветственный сокет
ServerSocket welcomeSocket = new ServerSocket(portNumber);
socket soc = welcomeSocket.accept();
и используйте
mMediaplayer.prepareAsync();
вместо
mMediaplayer.prepare();
Ответ 2
Android не поддерживает потоковое видео в Android 2.1 или ниже. То, что мы сделали, - это сделать изображения за кадром; и разбить каждое пламя на BYTE [] и отправить его с помощью класса Socket
. И в стороне приемника мы восстанавливаем изображения с использованием полученных BYTE[]
данных.