0

我正在尝试将视频流从我的 Galaxy Tab 写入服务器。根据本手册,我应该这样做:

        frontCamera = getFrontCamera();
        if((socket!= null)&&(frontCamera!=null))
        {
            try {
                frontCamera.setPreviewDisplay(cameraPreview.getHolder());
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                Log.e("","",e1);

            }
            frontCamera.startPreview();
            recorder =  new MediaRecorder();
            frontCamera.unlock();
            recorder.setCamera(frontCamera);
            recorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
            recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
            recorder.setProfile(CamcorderProfile.get( CamcorderProfile.QUALITY_HIGH));
            pfd = ParcelFileDescriptor.fromSocket(socket);
            recorder.setOutputFile(pfd.getFileDescriptor());
            recorder.setPreviewDisplay(cameraPreview.getHolder().getSurface());
            try {
                recorder.prepare();
                recorder.start();
} catch (IllegalStateException e) {
                // TODO Auto-generated catch block
                Log.e("","",e);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                Log.e("","",e);
            }

但是所有步骤都失败了recorder.start();,出现了奇怪的错误

02-01 19:03:39.265: E/MediaRecorder(11922): start failed: -19

这是什么意思,我应该怎么做才能启动记录器?

UPD:由于我的 getFrontCamera 方法而发生了问题。当我用 camera.open() 替换它时,一切正常。

protected Camera getFrontCamera()
{
    Camera.CameraInfo inf = new Camera.CameraInfo();
    for(int i = 0; i< Camera.getNumberOfCameras(); i++)
    {

        Camera.getCameraInfo(i, inf);
        if(inf.facing==Camera.CameraInfo.CAMERA_FACING_FRONT)
        {
            return Camera.open(i);
        }
    }
    return null;
}

Upd2 - 是的,格式和编码器的显式设置解决了这个问题 -

        recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);

也许是因为预构建格式用于后置摄像头......但无论如何都很奇怪。

4

4 回答 4

0

我没有看到输出格式设置,所以尝试添加到记录器设置:

 recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
于 2012-02-01T15:28:00.950 回答
0

看看_

虽然它是流媒体视频,所以设置 -

recorder.setOutputFormat(8);
recorder.setOutputFile(socketFd);

玩得开心。

于 2012-04-23T06:16:11.793 回答
0

我在这里有一个技巧,扩展媒体记录器类并删除 super.setVideoFrameRate(rate) 为我解决了这个问题。

于 2012-07-02T11:54:54.137 回答
0

如果您仍想CamcorderProfile.QUALITY_HIGH与前置摄像头一起使用,可以使用以下方法:

CamcorderProfile camcorderProfile = CamcorderProfile.get(currentCameraId, CamcorderProfile.QUALITY_HIGH);
recorder.setProfile(camcorderProfile);

int currentCameraId在哪里Camera.CameraInfo.CAMERA_FACING_BACK...FRONT

所以配置文件确实取决于相机(对于高端手机,它似乎可以正常工作,没有区别,因为它们现在都支持 1080p,但低端手机可能会崩溃)

于 2015-05-07T14:58:14.543 回答