标签: android-mediarecorder

MediaRecorder - 固件升级后代码停止工作

我有一个在Android 2.2上运行的三星Galaxy选项卡.我开发了一个简单的程序来分别录制音频和视频.它在我的galaxy选项卡上正常工作.但是,在将其升级到android 2.3.3后,一切都发生了变化.我的代码从那一刻开始停止工作.这是我的代码显示这个意外(对我:) :)行为:

// import statements

public class CameraPreview extends Activity implements SurfaceHolder.Callback {
    Camera camera;
    SurfaceView surfaceView;
    SurfaceHolder surfaceHolder;
    boolean previewing = false;
    LayoutInflater controlInflater = null;
    Button recordButton;

    /** Called when the activity is first created. */
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.camera);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

        getWindow().setFormat(PixelFormat.UNKNOWN);
        surfaceView = (SurfaceView) findViewById(R.id.camerapreview);
        surfaceHolder = surfaceView.getHolder();
        surfaceHolder.addCallback(this);
        surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

        controlInflater = LayoutInflater.from(getBaseContext());
        View viewControl = controlInflater.inflate(R.layout.control, null);
        LayoutParams layoutParamsControl = new LayoutParams(
                LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
        this.addContentView(viewControl, layoutParamsControl);

        recordButton = (Button)viewControl.findViewById(R.id.start_recording);
        recordButton.setOnClickListener(new View.OnClickListener() …
Run Code Online (Sandbox Code Playgroud)

android audio-recording video-recording mediarecorder android-mediarecorder

5
推荐指数
1
解决办法
1611
查看次数

即使没有其他代码分支,我的"return"语句也不起作用

我有一个尝试创建的方法AudioRecord.不同的手机支持不同的采样率,通道配置和音频格式.因此,该方法尝试AudioRecord为每个方法创建一个并返回第一个有效的方法.

private AudioRecord getAudioRecord() {
    for (int rate: sampleRates) {
        for (int audioFormat: audioFormats) {
            for (int channelConfig: channelConfigs) {
                String description = rate + "Hz, bits: " + audioFormat
                        + ", channel: " + channelConfig;

                Log.d(TAG, "Trying: " + description);

                int bufferSize = AudioRecord.getMinBufferSize(rate, channelConfig, audioFormat);
                if (bufferSize == AudioRecord.ERROR
                        || bufferSize == AudioRecord.ERROR_BAD_VALUE) {
                    Log.d(TAG, "Failed: This rate/channel config/format is not supported");
                    continue;
                }

                AudioRecord recorder = new AudioRecord(AudioSource.MIC, rate, channelConfig, audioFormat, bufferSize);
                if …
Run Code Online (Sandbox Code Playgroud)

java android android-mediarecorder

5
推荐指数
1
解决办法
291
查看次数

在Galaxy S3上录制时,视频显示会出现乱码

我正在写一个相机应用程序,我遇到了S3的问题.每当我开始录制时,显示屏都会变成垃圾(见下面的截图).然后,当我停止录制时,我得到一个例外:

10-02 13:36:31.647: E/MediaRecorder(24283): stop failed: -1007
10-02 13:36:31.647: D/AndroidRuntime(24283): Shutting down VM
10-02 13:36:31.647: W/dalvikvm(24283): threadid=1: thread exiting with uncaught exception (group=0x40c49a68)
10-02 13:36:31.647: E/AndroidRuntime(24283): FATAL EXCEPTION: main
10-02 13:36:31.647: E/AndroidRuntime(24283): java.lang.RuntimeException: stop failed.
10-02 13:36:31.647: E/AndroidRuntime(24283):    at android.media.MediaRecorder.native_stop(Native Method)
10-02 13:36:31.647: E/AndroidRuntime(24283):    at android.media.MediaRecorder.stop(MediaRecorder.java:742)
10-02 13:36:31.647: E/AndroidRuntime(24283):    at com.myapp.android.ui.camera.NewCameraActivity.stopRecording(NewCameraActivity.java:178)
10-02 13:36:31.647: E/AndroidRuntime(24283):    at com.myapp.android.ui.camera.NewCameraActivity.toggleRecording(NewCameraActivity.java:189)
10-02 13:36:31.647: E/AndroidRuntime(24283):    at com.myapp.android.ui.camera.NewCameraActivity.onClick(NewCameraActivity.java:97)
10-02 13:36:31.647: E/AndroidRuntime(24283):    at android.view.View.performClick(View.java:3565)
10-02 13:36:31.647: E/AndroidRuntime(24283):    at android.view.View$PerformClick.run(View.java:14165)
10-02 13:36:31.647: E/AndroidRuntime(24283):    at android.os.Handler.handleCallback(Handler.java:605)
10-02 13:36:31.647: E/AndroidRuntime(24283):    at …
Run Code Online (Sandbox Code Playgroud)

android android-camera galaxy android-mediarecorder

5
推荐指数
1
解决办法
3591
查看次数

Android Capture视频mediaRecorder.start()失败-19

我需要录制视频并保存它但是我在start()媒体记录器的方法上出错:失败 - 19(这个错误应该是什么?在文档中没有评论:()我正在与这个错误争论第二一天,我尝试了多个代码(谷歌教程,英特尔样本......)我在网上找到了,但无法完成任何工作.请帮助我找到导致问题的原因.我甚至开始怀疑我的手机(SE直播,wt19i)是否能够录制视频(但默认的相机应用程序工作正常).真的,拜托,有没有人知道我应该尝试/检查/修复什么?

这是我的录音代码:

public boolean record()
        {
            // if already recording, return
            if( recording ) return false;

            // We are recording
            recording = true;
            // log start of the method
            System.out.println("CameraPreview::record() - Method start");

            // Have tried to stop preview before record - didnt help
            //mCamera.stopPreview();
            mCamera.unlock();

            mRecorder = new MediaRecorder();
            // have tried this listener to get some extra info (doesnt work)
            mRecorder.setOnErrorListener(new MediaRecorder.OnErrorListener() {              
                public void onError(MediaRecorder mr, int …
Run Code Online (Sandbox Code Playgroud)

camera android android-mediarecorder

5
推荐指数
1
解决办法
5702
查看次数

使用SOX和sox FAIL格式混合音频:无法打开输入文件`audio_recorded.wav':WAVE:找不到RIFF标头

我想在Linux中使用SOX混合音频。这是我的剧本。我是这个东西的初学者。

    time sox --buffer 128000 --combine mix audio1.mp3 audio_recorded.wav -C 64.0 "./Mixed.mp3"
    time ffmpeg -loglevel warning -i ./Output.wav -c:a libfdk_aac -b:a 64k -map 0:0 -f segment -segment_time 10 -segment_list ./Output.m3u8 -segment_format aac './stream%03d.aac'

    cd ..
Run Code Online (Sandbox Code Playgroud)

但是结果是这样的。

    sox FAIL formats: can't open input file `audio_recorded.wav': WAVE: RIFF header not found

    real    0m0.003s
    user    0m0.000s
    sys     0m0.002s
Run Code Online (Sandbox Code Playgroud)

audio_recorded.wav是Android的一个录制的音频文件。

[已删除的ANDROID代码:不再需要]

更新:我试图将我的录音机..set比特率和采样率修改为audio1.mp3。然后我尝试将其混合。现在发生了什么:

    [root@app complete]# bash test_mix.sh 
    sox WARN mp3-util: MAD lost sync
    sox WARN mp3-util: recoverable MAD error
    sox WARN mp3-util: recoverable …
Run Code Online (Sandbox Code Playgroud)

linux sox android-mediarecorder

5
推荐指数
1
解决办法
2万
查看次数

Android MediaRecorder:连续覆盖

我正在尝试录制一段10秒钟的视频进行监控.在Android中使用MediaRecorder非常简单.我所要做的就是打电话

mediaRecorder.setMaxDuration(10000);
Run Code Online (Sandbox Code Playgroud)

但是,我想连续覆盖相同的10秒视频.同样,这是一项微不足道的任务.

@Override
public void onInfo(MediaRecorder mr, int what, int extra) {
    switch (what) {
    case MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED:
        stopRecording();
        startRecording();
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

停止和启动(重新设定)MediaRecorder大约需要两秒钟.如果在这两秒钟内发生了重要事情,我就不会记录下来.

因此,我通过使用LocalSocket跟踪其他几个具有相同问题的人,并将其描述符传递给MediaRecorder

mediaRecorder.setOutputFile(sender.getFileDescriptor());
Run Code Online (Sandbox Code Playgroud)

然后是一个包含LocalServerSocket和接收器LocalSocket的AyncTask

public class VirtualServer extends AsyncTask<Void, Void, Void> {
    ...
    server = new LocalServerSocket(SOCKET_ADDRESS);
    while (true) {
        receiver = server.accept();
        ...
        int len = 0;
        byte[] data = new byte[1024];
        while ((len = input.read(data)) >= 0) {
        ...
Run Code Online (Sandbox Code Playgroud)

看看这是怎么回事?一旦解决了,就会出现一个新问题,在StackOverflow上也会多次解决.问题是传递给MediaRecorder的文件描述符不可搜索.

对我而言,这是我的理解停止的地方.不幸的是,没有明确的问题描述.如果有人可以向我描述问题,我可以开始寻找解决方案.有些地方提到"moot"必须重新定位,但随后讨论会转向一般的mp4编码,我迷失在所有细节中.

我希望我的问题得到明确说明.我不想播放任何形式的视频.深入研究打包成RTP并尝试提取我真正需要的部分的代码让我更加困惑.

我已经看过的链接:

干杯.

android video-encoding mpeg-4 mediarecorder android-mediarecorder

5
推荐指数
0
解决办法
1270
查看次数

无法为媒体记录器设置视频质量.视频会产生闪烁的视频

mMediaRecorder = new MediaRecorder();
    // Step 1: Unlock and set camera to MediaRecorder
    mCamera.unlock();
    mMediaRecorder.setCamera(mCamera);
    // Step 2: Set sources
    // activate this for recording with sound\

    mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);

    mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);

    mMediaRecorder.setVideoSize(getMaxSupportedVideoSize().width,getMaxSupportedVideoSize().height);

    mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
    mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

    // Step 4: Set output file
    mMediaRecorder.setOutputFile(getOutputMediaFile("movie"));

    // Step 4: Set output file
    mMediaRecorder.setOutputFile(getOutputMediaFile("movie"));


    // Step 5: Set the preview output
    mMediaRecorder.setPreviewDisplay(mPreview.getHolder().getSurface());

    mMediaRecorder.setOrientationHint(90);
Run Code Online (Sandbox Code Playgroud)

以上代码工作正常但是,视频的质量与我在本机安卓摄像头拍摄的视频不一样,我使用媒体录像机录制的视频质量较差,与原生录像机相比,我怎样才能提高视频质量.

如果有人知道帮助我.谢谢

android surfaceholder android-mediarecorder

5
推荐指数
1
解决办法
3513
查看次数

Android:在同一SurfaceView中录制和播放视频

我想在SurfaceView中看到我正在录制的视频,如果重新编写完成,我想在同一个SurfaceView中重放视频.即使我认为这将是Apps中的常见功能,但我找不到任何示例,也无法使我的代码工作.

private void prepareRecorder() {
try {
    recorder = new MediaRecorder();
    recorder.setPreviewDisplay(holder.getSurface());

    camera.unlock();
    recorder.setCamera(camera);

    recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
    recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);

    camcorderProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_LOW);
    recorder.setProfile(camcorderProfile);

    File newFile = new File(videoFilePath);

    recorder.setOutputFile(newFile.getAbsolutePath());

    try {
        recorder.prepare();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}catch(Exception e){
    releaseCamera();
}
}
Run Code Online (Sandbox Code Playgroud)

//

public void onClick(View v) {


    if(mediaPlayer!=null) {
        mediaPlayer.reset();
        mediaPlayer.release();
    }
    mediaPlayer = new MediaPlayer();



    try {
        mediaPlayer.setDataSource(videoFile.getAbsolutePath());
        SurfaceView surfaceView = (SurfaceView) getView().findViewById(R.id.videoInvitationFragSurfaceView);

        mediaPlayer.setSurface(surfaceView.getHolder().getSurface());
        mediaPlayer.prepareAsync();
        mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mediaPlayer) …
Run Code Online (Sandbox Code Playgroud)

android surfaceview android-mediaplayer android-mediarecorder

5
推荐指数
1
解决办法
1538
查看次数

Android检测实际录制,MediaRecorder延迟

我想将手机中的数据与录制视频所花费的时间进行同步。我想获取有关录制视频所用时间的信息(以毫秒为单位)。我尝试通过以下方法解决该问题:
1.运行计时。
伪:

mMediaRecorder.start(); //start recording
startTime = System.currentTimeMillis(); //save start recording time
timerHandler.postDelayed(timerRunnable, 0); //for save elapsed time and timerHandler.postDelayed(this, 20); for next 20ms
Run Code Online (Sandbox Code Playgroud)

但是MediaRecorder存在问题,因为真实记录不会在MediaRecorder.start()之后立即开始,但是真实视频记录具有不同的延迟(取决于设备,...)。当MediaRecorder真正开始录制时,我需要“一些”回调或catch事件。

在此处输入图片说明 不需要有关停止录制的信息,因为我可以通过以下方式检查实际视频时长:

FileInputStream stream = new FileInputStream(storage.getVideoFile());
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource(stream.getFD());
String time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
Run Code Online (Sandbox Code Playgroud)

我尝试在录制时通过MediaMetadataRetriever获取实际持续时间,但它仅适用于关闭的视频文件。

我试图通过FileObserver和onEvent进行检测,但这是准确的。

如果可能的话,我想通过Android SDK解决。但是如何?
[最小SDK:API21]

谢谢。

android video-recording android-mediarecorder

5
推荐指数
1
解决办法
1003
查看次数

android.hardware.camera2错误相机正在使用中

我正在使用谷歌样本'android-Camera2Video':

https://github.com/googlesamples/android-Camera2Video

问题是,当应用程序完成录制时,有时会卡住片刻,然后使用1 - ' ERROR_CAMERA_IN_USE '错误代码调用CameraDevice.StateCallbackonError()处理程序.

它不会每次都发生,它发生在大约90%的情况下,有时一切正常,没有错误.我无法找出它取决于什么以及如何解决这个问题.如果有人以前遇到过这个问题,请帮忙.

android-mediarecorder android-camera2

5
推荐指数
0
解决办法
898
查看次数