我为Google Glass制作了一个视频录制应用程序.在Google发布固件XE19.1之前,该应用程序运行良好.我还有另一个固件为XE18.11的Google Glass.该应用程序仍可在带有XE18.11的Google Glass上运行.
我收到以下错误:
07-30 15:39:32.273: V/MediaRecorder(17101): vIDeo.h264enc.profile is set to : 107-30 15:39:32.679: W/IMediaDeathNotifIEr(17101): media server dIEd07-30 15:39:32.679: W/CameraBase(17101): Camera service dIEd!07-30 15:39:32.679: W/CameraBase(17101): mediaserver's remote binder Camera object dIEd07-30 15:39:32.687: E/CameraManager(17101): Media Recorder error: what=100, extra=007-30 15:39:32.726: E/Camera(17101): Error 100
我试过但没有用的东西:
>尝试MediaRecorder example from Google.仅适用于较旧的固件
>恢复出厂设置的谷歌眼镜
>尝试是否在录制前开始预览.都可以在较旧的固件上运行
>将SurfaceVIEw更改为TextureVIEw.都可以在较旧的固件上运行
>看了changelog GDK XE19.1
>搜索错误
这很奇怪,因为即使Google示例也不起作用.这是将SurfaceVIEw更改为TextureVIEw之后的代码:
public class CameraManager implements one rrorListener{ private final static String TAG = CameraManager.class.getname(); private final static int PREVIEW_SIZE_WIDTH = 640; private final static int PREVIEW_SIZE_HEIGHT = 360; private Activity mContext; private Camera mCamera; private TextureVIEw mCameraPrevIEw; private CameraListener mCameraListener; private MediaRecorder mMediaRecorder; private file mOutputVIDeofile; private boolean mRecording; private boolean mTakingPicture; public CameraManager(Activity context, TextureVIEw cameraPrevIEw, CameraListener cameraListener) { mRecording = false; mTakingPicture = false; mContext = context; mCameraPrevIEw = cameraPrevIEw; mCameraListener = cameraListener; } public voID startRecording(file outputVIDeofile) { Log.d(TAG, "startRecording"); mOutputVIDeofile = outputVIDeofile; new MediaPrepareTask().execute(null, null, null); } public voID stopRecording() { Log.d(TAG, "stopRecording"); mRecording = false; // stop the recording mMediaRecorder.stop(); // if we are using MediaRecorder, release it first releaseMediaRecorder(); // take camera access back from MediaRecorder mCamera.lock(); // release the camera immediately on pause event releaseCamera(); } public boolean isBusyRecording() { return mRecording; } public voID takePicture(final TakePictureCallback pictureCallback) { if (isBusyRecording() && !mTakingPicture) { mTakingPicture = true; mCamera.takePicture(null, null, new PictureCallback() { @OverrIDe public voID onPictureTaken(final byte[] pictureData, Camera camera) { pictureCallback.onPictureTaken(pictureData); mTakingPicture = false; } }); } } @TargetAPI(Build.VERSION_CODES.KITKAT) private boolean prepareVIDeoRecorder() { Log.d(TAG, "prepareVIDeoRecorder"); // BEGIN_INCLUDE (configure_prevIEw) mCamera = CameraHelper.getDefaultCameraInstance(); // We need to make sure that our prevIEw and recording vIDeo size are // supported by the // camera. query camera to find all the sizes and choose the optimal // size given the // dimensions of our prevIEw surface. Camera.Parameters parameters = mCamera.getParameters(); List<Camera.Size> mSupportedPrevIEwSizes = parameters.getSupportedPrevIEwSizes(); Camera.Size optimalSize = CameraHelper.getoptimalPrevIEwSize(mSupportedPrevIEwSizes, PREVIEW_SIZE_WIDTH, PREVIEW_SIZE_HEIGHT); // Use the same size for recording profile. CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUAliTY_HIGH); profile.vIDeoFrameWIDth = optimalSize.wIDth; profile.vIDeoFrameHeight = optimalSize.height; // likewise for the camera object itself. parameters.setPrevIEwSize(profile.vIDeoFrameWIDth, profile.vIDeoFrameHeight); mCamera.setParameters(parameters); try { // Requires API level 11+, For backward compatibility use {@link // setPrevIEwdisplay} // with {@link SurfaceVIEw} mCamera.setPrevIEwTexture(mCameraPrevIEw.getSurfaceTexture()); } catch (IOException e) { Log.e(TAG, "Surface texture is unavailable or unsuitable" + e.getMessage()); return false; } // END_INCLUDE (configure_prevIEw) // BEGIN_INCLUDE (configure_media_recorder) mMediaRecorder = new MediaRecorder(); mMediaRecorder.setonErrorListener(this); // Step 1: Unlock and set camera to MediaRecorder mCamera.unlock(); mMediaRecorder.setCamera(mCamera); // Step 2: Set sources mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAulT); mMediaRecorder.setVIDeoSource(MediaRecorder.VIDeoSource.CAMERA); // Step 3: Set a CamcorderProfile (requires API Level 8 or higher) mMediaRecorder.setProfile(profile); // Step 4: Set output file mMediaRecorder.setoutputfile(mOutputVIDeofile.toString()); // END_INCLUDE (configure_media_recorder) // Step 5: Prepare configured MediaRecorder try { mMediaRecorder.prepare(); } catch (IllegalStateException e) { Log.d(TAG, "IllegalStateException preparing MediaRecorder: " + e.getMessage()); releaseMediaRecorder(); return false; } catch (IOException e) { Log.d(TAG, "IOException preparing MediaRecorder: " + e.getMessage()); releaseMediaRecorder(); return false; } return true; } private voID releaseMediaRecorder() { Log.d(TAG, "releaseMediaRecorder"); if (mMediaRecorder != null) { // clear recorder configuration mMediaRecorder.reset(); // release the recorder object mMediaRecorder.release(); mMediaRecorder = null; // Lock camera for later use i.e taking it back from MediaRecorder. // MediaRecorder doesn't need it anymore and we will release it if // the activity pauses. mCamera.lock(); } } private voID releaseCamera() { Log.d(TAG, "releaseCamera"); if (mCamera != null) { // release the camera for other applications mCamera.release(); mCamera = null; } } /** * Asynchronous task for preparing the {@link androID.media.MediaRecorder} * since it's a long blocking operation. */ class MediaPrepareTask extends AsyncTask<VoID, VoID, Boolean> { @OverrIDe protected Boolean doInBackground(VoID... voIDs) { Log.d(TAG, "MediaPrepareTask - doInBackground"); // initialize vIDeo camera if (prepareVIDeoRecorder()) { // Camera is available and unlocked, MediaRecorder is prepared, // Now you can start recording mMediaRecorder.start(); mRecording = true; } else { // prepare dIDn't work, release the camera releaseMediaRecorder(); return false; } return true; } @OverrIDe protected voID onPostExecute(Boolean result) { if (!result) { mContext.finish(); } mCameraListener.onCameraRecording(); } } @OverrIDe public voID one rror(MediaRecorder mr, int what, int extra) { Log.e(TAG, String.format("Media Recorder error: what=%d, extra=%d", what, extra)); }}
谢谢
解决方法:
不幸的是,这是我们的issue tracker中当前存在的已知问题.
更新:20.1更新已解决此问题.
总结以上是内存溢出为你收集整理的android-MediaRecorder在新的Google Glass固件(XE19.1)媒体服务器上无法正常工作,死于错误100全部内容,希望文章能够帮你解决android-MediaRecorder在新的Google Glass固件(XE19.1)媒体服务器上无法正常工作,死于错误100所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)