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(8);
recorder.setOutputFile(socketFd);

楽しむ。

于 2012-04-23T06:16:11.793 に答える
0

出力形式のセットアップが表示されないため、レコーダーのセットアップに追加してみてください。

 recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
于 2012-02-01T15:28:00.950 に答える
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 に答える