Как я могу отправить потоковое видео на удаленный сервер со своего телефона! - PullRequest
3 голосов
/ 26 декабря 2010

У меня проблема с передачей видео на сервер в реальном времени с телефона.то есть, пусть мой телефон будет IP-камерой, и сервер сможет смотреть живое видео с моего телефона

Я нашел много разных решений, но никто не может решить мою проблему.Я использую MediaRecorder для записи.он может правильно сохранить видео файл на SD-карте.затем я сослался на эту страницу и использовал какой-то метод следующим образом

 skt = new Socket(InetAddress.getByName(hostname),port);
 pfd =ParcelFileDescriptor.fromSocket(skt);
 mediaRecorder.setOutputFile(pfd.getFileDescriptor());

теперь кажется, что я могу отправлять видеопоток во время записи

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

есть схема моего кода.

на стороне Android

    Socket skt = new Socket(hostIP,port);
ParcelFileDescriptor pfd =ParcelFileDescriptor.fromSocket(skt);
....
....
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setOutputFile(pfd.getFileDescriptor());
.....
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
.....
mediaRecorder.start();

на стороне приемника (мой ноутбук ACER)

// anyway , I don't think the file extentions will do any effect                
File video = new File (strDate+".3gpp");
FileOutputStream fos;
try {
fos = new FileOutputStream(video);

byte[] data = new byte[1024];

int count =-1;

while( (count = fin.read(data,0,1024) ) !=-1)
{
    fos.write(data,0,count);                                
    fos.flush();    
}                                       
fos.close();
fin.close();

Я запутался долго .... заранее спасибо

1 Ответ

4 голосов
/ 25 января 2011

Poc,

. MediaRecorder записывает файлы следующим образом: оставляйте место для пустого заголовка. Записывайте содержимое файла во время записи. Когда запись заканчивается, ищите начало файла. Записывайте заголовок в начале файла. Затем(Я полагаю) есть другой поиск в конец файла, в который записаны метаданные.

Поскольку не существует понятия «поиск» в сокете, вам придется выяснить, когда придет заголовок, искатьв начало вашего файла, а затем напишите заголовок в соответствующем месте.

Лучше всего начать с использования гекседитора, чтобы определить формат действительного файла 3gpp, а затем проанализировать этот гекс с учетом вашегошестнадцатеричный вывод программы-получателя.Также вам захочется взглянуть на форматы файлов 3gpp.

...