Android Capture video mediaRecorder.start () не удалось -19

Мне нужно записать видео и сохранить его, но я получаю ошибку по start() методу медиа-рекордера: failed - 19 (что это за ошибка должна быть? В документации нет комментариев по этому поводу :( ) Я борюсь с этой ошибкой второй день, я пробовал несколько кодов (учебник Google, пример Intel, ...) Я нашел по всему Интернету, но не смог заставить работать ни один из них Пожалуйста, помогите мне найти причину проблема. Я даже начинаю сомневаться, что мой мобильный телефон (SE live, wt19i ) способен записывать видео (но приложение камеры по умолчанию работает нормально). Действительно, пожалуйста, есть ли у кого-нибудь идея что мне попробовать/проверить/исправить?

Вот мой код для записи:

public boolean record()
        {
            // if already recording, return
            if( recording ) return false;

            // We are recording
            recording = true;
            // log start of the method
            System.out.println("CameraPreview::record() - Method start");

            // Have tried to stop preview before record - didnt help
            //mCamera.stopPreview();
            mCamera.unlock();

            mRecorder = new MediaRecorder();
            // have tried this listener to get some extra info (doesnt work)
            mRecorder.setOnErrorListener(new MediaRecorder.OnErrorListener() {              
                public void onError(MediaRecorder mr, int what, int extra) {
                    System.out.println("MediaRecorder::onError listener:"+what+" - "+extra);

                }
            });


            mRecorder.setCamera(mCamera);

            // Set media recorder properties
            mRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
            mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);

            mRecorder.setProfile( CamcorderProfile.get( CamcorderProfile.QUALITY_LOW ) );
            // have tried to set format without profile - didnt help
            //mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
            //mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
            //mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myvideorecord"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="15" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
        android:debuggable="true" >
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main"
            android:screenOrientation="landscape" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".CameraPreview"
            android:screenOrientation="landscape"
            ></activity>
    </application>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-feature android:name="android.hardware.camera" />
</manifest>
SP); mRecorder.setOutputFile("/sdcard/MVR_video.3gp"); mRecorder.setPreviewDisplay(mHolder.getSurface()); // Prepare media recorder try { mRecorder.prepare(); } catch (Exception e) { Log.d("MyVideoRecord", "Error preparing media recorder: " + e.getMessage()); System.out.println("CameraPreview::record() - prepare() thrown an exception"); stopRecord(); return false; } // Have tried to wait until prepare is done - didnt help try {Thread.sleep(1000); } catch( Exception e){} try { mRecorder.start(); } catch (Exception e) { Log.d("MyVideoRecord", "Error starting media recorder: " + e.getMessage()); System.out.println("CameraPreview::record() - start() thrown an exception"); System.out.println("Exception: "+e.getMessage()); e.printStackTrace(); stopRecord(); return false; } System.out.println("CameraPreview::record() - Method returning TRUE"); return true; }

У меня есть запросы на разрешение для камеры, карты памяти и звука в файле манифеста. Я установил для minSdkVersion значение 10 и цель — 15.

Вот LogCat

I/System.out(3990): CameraPreview::record() - Method start
I/MediaRecorderJNI(3990): prepare: surface=0x1f8e10 (identity=171)
E/MediaRecorder(3990): start failed: -19
D/MyVideoRecord(3990): Error starting media recorder: start failed.
I/System.out(3990): CameraPreview::record() - start() thrown an exception
I/System.out(3990): Exception: start failed.
W/System.err(3990): java.lang.RuntimeException: start failed.
W/System.err(3990):     at android.media.MediaRecorder.start(Native Method)
W/System.err(3990):     at com.example.myvideorecord.CameraPreview.record(CameraPreview.java:142)
W/System.err(3990):     at com.example.myvideorecord.MainActivity.onOptionsItemSelected(MainActivity.java:101)
W/System.err(3990):     at android.app.Activity.onMenuItemSelected(Activity.java:2502)
W/System.err(3990):     at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:969)
W/System.err(3990):     at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
W/System.err(3990):     at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:149)
W/System.err(3990):     at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
W/System.err(3990):     at com.android.internal.view.menu.IconMenuView.invokeItem(IconMenuView.java:468)
W/System.err(3990):     at com.android.internal.view.menu.IconMenuItemView.performClick(IconMenuItemView.java:126)
W/System.err(3990):     at android.view.View$PerformClick.run(View.java:14263)
W/System.err(3990):     at android.os.Handler.handleCallback(Handler.java:605)
W/System.err(3990):     at android.os.Handler.dispatchMessage(Handler.java:92)
W/System.err(3990):     at android.os.Looper.loop(Looper.java:137)
W/System.err(3990):     at android.app.ActivityThread.main(ActivityThread.java:4441)
W/System.err(3990):     at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err(3990):     at java.lang.reflect.Method.invoke(Method.java:511)
W/System.err(3990):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
W/System.err(3990):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
W/System.err(3990):     at dalvik.system.NativeStart.main(Native Method)

РЕДАКТИРОВАТЬ:

Я добавляю свой файл манифеста:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myvideorecord"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="15" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
        android:debuggable="true" >
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main"
            android:screenOrientation="landscape" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".CameraPreview"
            android:screenOrientation="landscape"
            ></activity>
    </application>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-feature android:name="android.hardware.camera" />
</manifest>

РЕДАКТИРОВАТЬ2

Я попытался запустить это приложение на моем моб двоюродного брата (это SE, но другая модель), и оно работало без проблем. Поскольку для моего телефона нет обновления Android, я пытаюсь «починить» его с помощью оригинального программного обеспечения «Sony pc compant». Я надеюсь, что после этого он будет работать, так как я думаю, что невозможно понизить версию Android без какого-либо «хака».

РЕДАКТИРОВАТЬ3

Я пытался обновить и даже понизить прошивку на своем мобильном телефоне. Ничего не изменилось. Я подумываю написать в службу поддержки клиентов или на форум XDA и попросить любого, у кого есть такой же телефон, попытаться запустить его.


person Buksy    schedule 05.12.2012    source источник


Ответы (2)


Развивайте его шаг за шагом. Начните со значений по умолчанию.

mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
//Use values from available Camera preview sizes 
mMediaRecorder.setVideoSize(mCameraPreview.getPreviewWidth(), mCameraPreview.getPreviewHeight());
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);

У вас все равно будут ошибки, если вы не укажете размер видео. Если у вас нет реализации управления размерами предварительного просмотра. Попробуйте с фиксированным размером, должно работать:

mMediaRecorder.setVideoSize(320, 240);
person Nicolas Siver    schedule 19.04.2013
comment
Спасибо, я установил источник аудио и видео, формат вывода, кодировщик аудио и видео по умолчанию, а затем вызвал setOutputFile и SetPreviewDisplay и prepare(), но я все еще получаю ту же ошибку :( - person Buksy; 23.04.2013
comment
Как насчет размера видео? Какой размер поддерживает видеокамера? И какое значение вы пытаетесь установить? - person Nicolas Siver; 24.04.2013

Я не могу найти документацию по ошибке -19. Однако похоже, что вы запрашиваете не все необходимые разрешения. Ошибка start failed иногда возникает из-за отсутствия разрешения:

Возможные разрешения, которые можно попробовать добавить:

<uses-feature android:name="android.hardware.microphone"/>

и

<uses-permission android:name="android.permission.STORAGE" />
person onosendai    schedule 06.12.2012
comment
Я не использую внутреннюю память и имею там android.permission.RECORD_AUDIO запрос. Но я попробую это и дам вам знать, спасибо - person Buksy; 06.12.2012
comment
Хорошо, теперь я проверил это, к сожалению, я все еще получаю ту же ошибку :( - person Buksy; 06.12.2012
comment
:( ну, попробовать стоило. Кстати, я сначала предположил, что -19 был флагом ошибки, но потом я увидел этот вопрос и ответ со ссылкой на неудавшийся -23232! codeproject.com/Articles/14948/. - person onosendai; 06.12.2012