android-MediaRecorder在新的Google Glass固件(XE19.1)媒体服务器上无法正常工作,死于错误100

android-MediaRecorder在新的Google Glass固件(XE19.1)媒体服务器上无法正常工作,死于错误100,第1张

概述我为GoogleGlass制作了一个视频录制应用程序.在Google发布固件XE19.1之前,该应用程序运行良好.我还有另一个固件为XE18.11的GoogleGlass.该应用程序仍可在带有XE18.11的GoogleGlass上运行.我收到以下错误:07-3015:39:32.273:V/MediaRecorder(17101):video.h264enc.profile

我为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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1088409.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存