Я пытаюсь записать записи видеокамеры в сетевой поток, см. следующий фрагмент:
ParcelFileDescriptor fd = ParcelFileDescriptor.fromSocket(socket);
this.camera.lock(); // this.camera refers to an android.hardware.Camera instance.
this.camera.unlock();
this.mediaRecorder = new MediaRecorder();
this.mediaRecorder.setCamera(this.camera);
this.mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
this.mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
this.mediaRecorder.setProfile(CamcorderProfile.get(0, CamcorderProfile.QUALITY_HIGH));
this.mediaRecorder.setOutputFile(fd.getFileDescriptor());
this.mediaRecorder.prepare();
this.mediaRecorder.start();
Затем я пытаюсь перехватить его на другой стороне соединения: с помощью Socket.getInputStream()
я читаю байты, и да, байты приходят. Байты записываются на самом деле по сети.
Но когда вы пытаетесь сохранить его в файл с помощью класса FileOutputStream
и открыть файл с помощью VLC, он просто не может быть прочитан.
Как я могу в конечном итоге сделать файл «воспроизводимым», что означает, что это действительный видеофайл?
Редактировать:
Когда я использую this.mediaRecorder.setOutputFile("/sdcard/out.mp4");
, я могу открыть видеофайл из Android, и он будет успешно воспроизводиться. Однако, когда я использую this.mediaRecorder.setOutputFile(fd.getFileDescriptor());
, этого не произойдет.
MediaRecorder
необработанный кодек. - person CommonsWare   schedule 07.05.2014MediaRecorder
не может вернуться к началу, чтобы исправить заголовок файла с результатами записи. Тот факт, что байты были записаны в файл кем-то другим, не имеет значения. - person CommonsWare   schedule 07.05.2014