big_cccc 2014-09-28 03:01 采纳率: 0%
浏览 2629

安卓录像问题。报错Media server died.

public class MainActivity extends Activity {

MediaRecorder  recorder= null;
Button startButton = null; 
Button endtButton = null; 
SurfaceView  face = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    startButton=(Button) findViewById(R.id.end);
    endtButton= (Button) findViewById(R.id.start);
    face=                 (SurfaceView) findViewById(R.id.surfaceView);
    face.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    face.getHolder().setFixedSize(176, 144);
    face.getHolder().setKeepScreenOn(true);
    startButton.setOnClickListener(ButtonClickDo);
    endtButton.setOnClickListener(ButtonClickDo);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}



public void startRecord() throws Throwable, IOException{
    File f = new File( Environment.getExternalStorageDirectory() ,System.currentTimeMillis()+".3gp");
  recorder = new MediaRecorder();
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    recorder.setVideoSize(320, 240);
    recorder.setVideoFrameRate(5);
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_WB);
    recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
    recorder.setOutputFile(f.getAbsolutePath());
recorder.setPreviewDisplay(face.getHolder().getSurface());
System.out.println("路径"+    f.getAbsolutePath());
    recorder.prepare();
    recorder.start();


}



public void stopRecord(){
    if(recorder!=null){
        recorder.stop();
        recorder.release();
        recorder=null;
    }

}

private OnClickListener    ButtonClickDo = new OnClickListener() {
    @Override
    public void onClick(View v) {
         Integer id =   v.getId();
         System.out.println("id为:"+ id +"结果" +(endtButton.getId()==id));
         if(endtButton.getId()==id){
                try {
                    startRecord();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (Throwable e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
         }
            else{
             stopRecord();
         }



    }
};

}

这段代码可以正常的录像, 发到手机内存里 。但是我把
recorder.setPreviewDisplay(face.getHolder().getSurface()); 这句话给注释掉就报
Media server died. 。拍出来的东西只有23KB 怎么拍都只有23KB 不能播放 说文件损坏,
请问是怎么回事。 我想达到 录像 但不显示录像的画面。 怎么操作

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-02 19:00
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在Android中录制视频时,MediaServer是一个用于管理设备媒体服务器的类。当尝试将摄像头设置为视频源时,可能会出现以下错误:

    1. MediaServer未初始化:这通常意味着您的应用没有正确地创建并初始化MediaRecorder对象。

    解决方法:

    • 确保您已经初始化了MediaRecorder
    • 检查是否有其他应用程序正在使用此资源,以防止冲突。
    1. MediaServer已关闭或被释放:确保MediaServer已经被正确地关闭或释放。
    • 在调用release()之前检查isClosed()isReleased()状态。
    1. MediaServer内存泄漏:如果存在内存泄漏,可能导致MediaServer无法正常工作。
    • 使用Log.d()日志打印来跟踪内存泄漏情况,并使用CollectGarbage()来清除内存泄漏。
    1. 超过最大缓冲区限制:如果您试图访问超过设备缓存的最大缓冲区大小,则可能引发MediaServer异常。
    • 检查face.getHolder().getSurface()中的尺寸是否符合预期,并且是否足够大以容纳所有内容。
    1. 文件存储路径问题:检查您的file.getAbsolutePath()返回的路径是否指向正确的文件系统路径,以及是否具有足够的权限读取和写入文件。

    2. 编码器或解码器配置问题:确认您选择了适当的编码器和解码器,以及它们是否与您的硬件兼容。

    3. 应用程序版本或权限问题:确保您的应用当前版本是支持录制视频的,或者尝试获得必要的权限。

    4. 设备兼容性问题:某些设备(如某些型号的Samsung Galaxy系列)可能不支持录制视频功能。

    5. 电池电量不足:尝试在电量充足的情况下再次录制视频。

    6. 内存溢出:确保有足够的可用内存来处理视频数据流。

    综上所述,要解决上述问题,请根据具体情况分析并逐一排查。例如,检查设备信息、日志记录等。

    评论

报告相同问题?

悬赏问题

  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
  • ¥20 pcf8563时钟芯片不启振
  • ¥20 pip2.40更新pip2.43时报错
  • ¥15 换yum源但仍然用不了httpd
  • ¥50 C# 使用DEVMOD设置打印机首选项