是否有可能在服務中錄製視頻,即沒有設置setPreviewDisplay? 我想它在HTC Desire的,但它是引發此信息在日誌中,在服務中錄製視頻
MediaRecorder準備失敗:-1
CameraInput沒有表面可用於顯示
有一些額外的屬性被設置? API等級1套表面 用於實時預覽:
是否有可能在服務中錄製視頻,即沒有設置setPreviewDisplay? 我想它在HTC Desire的,但它是引發此信息在日誌中,在服務中錄製視頻
MediaRecorder準備失敗:-1
CameraInput沒有表面可用於顯示
有一些額外的屬性被設置? API等級1套表面 用於實時預覽:
我根據由於文檔
公衆最終無效setPreviewDisplay (SurfaceHolder持有者)
相信。 預覽所需的表面爲 ,預覽爲拍攝所需的 。同樣的 表面可以重新設置而不會造成傷害。
我知道你是想拍攝視頻,但是,我把這個給我,任何相機的使用都需要一個表面。
攝像頭只需要預覽即可啓動,一旦它被初始化,我認爲預覽可以被破壞,我已經看到IPWeb Cam使用這個MJPEG服務器。我仍然想要使用這個視頻來製作任何應用程序 – Azlam 2010-11-22 14:22:29
我在某處找到了這個片段。不知道它是否適用於媒體記錄器,但它在HTC hero android 2.1-update1(和模擬器)上的camera.takePicture工作得相當好。
if (camera == null) {
Log.i(TAG, "Opening camera");
camera = Camera.open();
}
SurfaceView view = new SurfaceView(new DummyContext()); //You'll have to create your own class extending Context
camera.setPreviewDisplay(view.getHolder());
camera.startPreview();
//wait
Log.i(TAG, "Wait for cam");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
Log.e(TAG, "Woken violently");
e.printStackTrace();
}
//take pic
Log.i(TAG, "Take pic");
camera.takePicture(shutterCallback, rawCallback, jpegCallback);
公共類RecorderService延伸服務{ 私有靜態最後絃樂TAG = 「RecorderService」; 私人SurfaceView mSurfaceView; 私人SurfaceHolder mSurfaceHolder; private static Camera mServiceCamera; private boolean mRecordingStatus; private MediaRecorder mMediaRecorder; 私有文件filefolder; private String strphoto; 私人文件照片;
@Override
public void onCreate() {
mRecordingStatus = false;
//mServiceCamera = CameraRecorder.mCamera;
mServiceCamera = Camera.open();
mSurfaceView = CameraRecorder.mSurfaceView;
mSurfaceHolder = CameraRecorder.mSurfaceHolder;
super.onCreate();
if (mRecordingStatus == false)
startRecording();
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onDestroy() {
stopRecording();
mRecordingStatus = false;
super.onDestroy();
}
public boolean startRecording(){
try {
Toast.makeText(getBaseContext(), "Recording Started", Toast.LENGTH_SHORT).show();
//mServiceCamera = Camera.open();
Camera.Parameters params = mServiceCamera.getParameters();
mServiceCamera.setParameters(params);
Camera.Parameters p = mServiceCamera.getParameters();
final List<Size> listSize = p.getSupportedPreviewSizes();
Size mPreviewSize = listSize.get(2);
Log.v(TAG, "use: width = " + mPreviewSize.width
+ " height = " + mPreviewSize.height);
p.setPreviewSize(mPreviewSize.width, mPreviewSize.height);
p.setPreviewFormat(PixelFormat.YCbCr_420_SP);
mServiceCamera.setParameters(p);
try {
mServiceCamera.setPreviewDisplay(mSurfaceHolder);
mServiceCamera.startPreview();
}
catch (IOException e) {
Log.e(TAG, e.getMessage());
e.printStackTrace();
}
mServiceCamera.unlock();
mMediaRecorder = new MediaRecorder();
mMediaRecorder.setCamera(mServiceCamera);
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))
{
filefolder=new File(android.os.Environment.getExternalStorageDirectory(),"Backgroundcamera/videos");
}
else
{
filefolder=RecorderService.this.getCacheDir();
}
if(!filefolder.exists())
filefolder.mkdirs();
strphoto = System.currentTimeMillis()+".mp4";
mMediaRecorder.setOutputFile(filefolder+"/"+strphoto);
mMediaRecorder.setVideoFrameRate(30);
mMediaRecorder.setVideoSize(mPreviewSize.width, mPreviewSize.height);
mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
mMediaRecorder.prepare();
mMediaRecorder.start();
mRecordingStatus = true;
return true;
} catch (IllegalStateException e) {
Log.d(TAG, e.getMessage());
e.printStackTrace();
return false;
} catch (IOException e) {
Log.d(TAG, e.getMessage());
e.printStackTrace();
return false;
}
}
public void stopRecording() {
Toast.makeText(getBaseContext(), "Recording Stopped", Toast.LENGTH_SHORT).show();
try {
mServiceCamera.reconnect();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mMediaRecorder.stop();
mMediaRecorder.reset();
mServiceCamera.stopPreview();
mMediaRecorder.release();
mServiceCamera.release();
mServiceCamera = null;
}
} 和
開始點擊listerner服務。
我非常懷疑它。你需要一個上下文(我認爲)。您可能會將上下文傳遞到您的服務中,但我認爲您必須調用setPreviewDisplay。你想做什麼?如果用戶不知道,我認爲您無法錄製視頻。 – Falmarri 2010-10-19 18:54:04
我試圖創建一種可以在後臺錄製視頻的監視類應用,順便說一下,它允許在後臺錄製聲音! – Azlam 2010-10-19 18:58:12