gpt4 book ai didi

android - android中的音频和视频录制错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:30:00 24 4
gpt4 key购买 nike

我需要在同一个文件中同时将音频和视频文件录制为 3gp/mp4 格式。当我运行时,我的应用程序文件是使用 videofile.3gp 创建的,但视频没有记录到模拟器上的 SD 卡中。是否在模拟器上录制视频?如果我在支持 Android 的设备上运行此代码,我会看到这些错误吗?

代码和错误如下:

    package com.video;
/*
*
* @copy Rights
* audio.java
* sample code for Eminosoft Developerworks Article
* Android developent Team
* www.eminosoft.cm
*
*/


import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.provider.Settings;
import android.util.Log;
import android.view.View;
import android.widget.Button;


public class video extends Activity {

public MediaRecorder mrec = null;
private Button startRecording = null;
private Button stopRecording = null;
private static final String TAG = "SoundRecordingDemo";
File audiofile;
File video;
private MediaPlayer mMediaPlayer;



/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mrec = new MediaRecorder();
mMediaPlayer = new MediaPlayer();

Log.i(TAG , "Video starting");
startRecording = (Button)findViewById(R.id.startrecording);
stopRecording = (Button)findViewById(R.id.stoprecording);
startRecording.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
try
{
mMediaPlayer=new MediaPlayer();
Context appContext = getApplicationContext();
startRecording.setEnabled(false);
stopRecording.setEnabled(true);
stopRecording.requestFocus();
startRecording();
}catch (Exception ee)
{
Log.e(TAG,"Caught io exception " + ee.getMessage());
}

}
});

stopRecording.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
startRecording.setEnabled(true);
stopRecording.setEnabled(false);
startRecording.requestFocus();
stopRecording();
processaudiofile();
}

});

stopRecording.setEnabled(false);
startRecording.setEnabled(true);

}
protected void processaudiofile() {
ContentValues values = new ContentValues(4);
long current = System.currentTimeMillis();
values.put(MediaStore.Video.Media.TITLE, "video"+video.getName());
values.put(MediaStore.Video.Media.DATE_ADDED, (int)(current/1000));
values.put(MediaStore.Video.Media.MIME_TYPE, "video/3gpp");
values.put(MediaStore.Video.Media.DATA, video.getAbsolutePath());
ContentResolver contentResolver = getContentResolver();
Uri base=MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
Uri newUri = contentResolver.insert(base, values);
// this does not always seem to work cleanly....
//sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,newUri ));
}

protected void startRecording() throws IOException
{

// Configure the input sources
mrec.setAudioSource(MediaRecorder.AudioSource.MIC);
mrec.setVideoSource(MediaRecorder.VideoSource.CAMERA);

// Set the output format
mrec.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mrec.setVideoFrameRate(15);

// Specify the audio and video encoding
mrec.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mrec.setVideoEncoder(MediaRecorder.VideoEncoder.H264);

//mrec.setMaxDuration(20000); // length of video in MS
//mrec.setVideoSize(320, 240);


// Specify the output file
//mrec.setOutputFile("/sdcard/myoutputfile.mp4");

// Prepare to record
//mrec.prepare();

//mrec.start();

//mrec.setOutputFile(video.getPath());
//mrec.setOutputFile(/sdcard/yousuck2.3gp);
// mRecorder.setOutputFile("/sdcard/yousuck2.3gp");
if (video == null) {
File sampleDir = Environment.getExternalStorageDirectory();
try {
video = File.createTempFile("videofile", ".3gp", sampleDir);
}
catch (IOException e)
{
Log.e(TAG,"sdcard access error");
return;
}
}

mrec.setOutputFile(video.getAbsolutePath());

mrec.prepare();
mrec.start();
}

protected void stopRecording() {
mrec.stop();
mrec.release();
}

}

我收到以下错误。

ERROR/AndroidRuntime(16055): ERROR: thread attach failed

ERROR/audio_input(31): unsupported parameter: x-pvmf/media-input-node/cap-config-interface;valtype=key_specific_value

ERROR/audio_input(31): VerifyAndSetParameter failed



ERROR/CameraInput(31): Unsupported parameter(x-pvmf/media-input-node/cap-config-interface;valtype=key_specific_value)


ERROR/CameraInput(31): VerifiyAndSetParameter failed on parameter #0


ERROR/PVOMXEncNode(31): PVMFOMXEncNode-Audio_AMRNB::DoPrepare(): Got Component OMX.PV.amrencnb handle


ERROR/PVOMXEncNode(31): PVMFOMXEncNode-Video_AVC::DoPrepare(): Cannot get component OMX.PV.avcenc handle, try another component if available



ERROR/MediaPlayerService(31): error: -2


ERROR/MediaPlayer(31): Unable to to create media player



ERROR/CameraService(31): Failed to load CameraService sounds.


ERROR/MediaPlayerService(31): error: -2

ERROR/MediaPlayer(31): Unable to to create media player

ERROR/CameraService(31): Failed to load CameraService sounds.

ERROR/CameraInput(31): No surface is available for display.

ERROR/AuthorDriver(31): Command 13 completed with error -1

ERROR/SoundRecordingDemo(15961): Caught io exception prepare failed.

最佳答案

相机 API 似乎需要设置许多源,包括音频、视频和预览表面。下面的代码更完整:

recorder = new MediaRecorder(); 
recorder.setPreviewDisplay(previewSurface);

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

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

recorder.setMaxDuration(1000 * 10);
recorder.setOnInfoListener(self);

recorder.setVideoSize(200, 200);
recorder.setVideoFrameRate(15);

recorder.setOutputFile("/sdcard/test.mp4");

recorder.prepare();
recorder.start();

关于android - android中的音频和视频录制错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3281549/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com