Android Записать видео - PullRequest
       4

Android Записать видео

0 голосов
/ 26 декабря 2011

Я пытаюсь записать видео на свой проект Android.

Я нашел несколько примеров в Интернете, но ничего не работает.Обычно я должен использовать MediaRecorder

Можете ли вы дать мне простой пример, мне не нужно визуализировать видео, когда оно является токеном, только чтобы зарегистрировать его на моей SD-карте, и все.

Вот пример того, что я пытаюсь сделать:

public class VideoCapture extends Activity {  

    MediaRecorder recorder;  
    Button buttonStart = (Button)findViewById(R.id.buttonstart);  
    Button buttonStop = (Button)findViewById(R.id.buttonstop);  

    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        recorder = new MediaRecorder();  
        initRecorder();  
    }  

    private void initRecorder() {  
        recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);  
        recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);  
        recorder.setProfile(cpHigh);  
        recorder.setOutputFile("/sdcard/videocapture_example.mp4");  
        recorder.setMaxDuration(50000);  
        recorder.setMaxFileSize(5000000);  
    }  

    private void prepareRecorder() {  
        try {  
            recorder.prepare();  
        } catch (IllegalStateException e) {  
            e.printStackTrace();  
            finish();  
        } catch (IOException e) {  
            e.printStackTrace();  
            finish();  
        }  
    }  

    buttonStart.setOnClickListener(new Button.OnClickListener()

            {  
        @Override  
        public void onClick(View v)  
        {  
        initRecorder();  
            prepareRecorder();  
        }});  

    buttonStop.setOnClickListener(new Button.OnClickListener(){  
        @Override  
        public void onClick(View v)  
        {  
            recorder.stop();  
        }
    }); 
}

Stacktrace:

12-25 22:04:24.188: E/AndroidRuntime(1361): FATAL EXCEPTION: main
12-25 22:04:24.188: E/AndroidRuntime(1361): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{test.milos.net/test.milos.net.TestVideoNetActivity}: java.lang.ClassNotFoundException: test.milos.net.TestVideoNetActivity in loader dalvik.system.PathClassLoader[/data/app/test.milos.net-2.apk]
12-25 22:04:24.188: E/AndroidRuntime(1361):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1660)
12-25 22:04:24.188: E/AndroidRuntime(1361):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1752)
12-25 22:04:24.188: E/AndroidRuntime(1361):     at android.app.ActivityThread.access$1500(ActivityThread.java:123)
12-25 22:04:24.188: E/AndroidRuntime(1361):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:993)
12-25 22:04:24.188: E/AndroidRuntime(1361):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-25 22:04:24.188: E/AndroidRuntime(1361):     at android.os.Looper.loop(Looper.java:126)
12-25 22:04:24.188: E/AndroidRuntime(1361):     at android.app.ActivityThread.main(ActivityThread.java:3997)
12-25 22:04:24.188: E/AndroidRuntime(1361):     at java.lang.reflect.Method.invokeNative(Native Method)
12-25 22:04:24.188: E/AndroidRuntime(1361):     at java.lang.reflect.Method.invoke(Method.java:491)
12-25 22:04:24.188: E/AndroidRuntime(1361):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
12-25 22:04:24.188: E/AndroidRuntime(1361):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
12-25 22:04:24.188: E/AndroidRuntime(1361):     at dalvik.system.NativeStart.main(Native Method)
12-25 22:04:24.188: E/AndroidRuntime(1361): Caused by: java.lang.ClassNotFoundException: test.milos.net.TestVideoNetActivity in loader dalvik.system.PathClassLoader[/data/app/test.milos.net-2.apk]
12-25 22:04:24.188: E/AndroidRuntime(1361):     at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:251)
12-25 22:04:24.188: E/AndroidRuntime(1361):     at java.lang.ClassLoader.loadClass(ClassLoader.java:548)
12-25 22:04:24.188: E/AndroidRuntime(1361):     at java.lang.ClassLoader.loadClass(ClassLoader.java:508)
12-25 22:04:24.188: E/AndroidRuntime(1361):     at android.app.Instrumentation.newActivity(Instrumentation.java:1022)
12-25 22:04:24.188: E/AndroidRuntime(1361):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
12-25 22:04:24.188: E/AndroidRuntime(1361):     ... 11 more

1 Ответ

1 голос
/ 26 декабря 2011

Как вы уже догадались, вы делаете неправильно несколько вещей, которые не имеют ничего общего с реальной записью видео.

Первая проблема:

Button buttonStart = (Button)findViewById(R.id.buttonstart);  
Button buttonStop = (Button)findViewById(R.id.buttonstop);  

Вы не можете позвонить findViewById() здесь.findViewById() только поиск в иерархии текущего вида деятельности.В тот момент, когда ваш класс укрепляется, отсутствует иерархия представлений.Эти члены класса всегда будут нулевыми, потому что это то, что возвращается, если представление не может быть найдено.Вы можете сохранить объявление переменной, но переместить поисковую часть в onCreate() после вызова setContentView(), например, так:

setContentView(R.layout.main);
buttonStart = (Button)findViewById(R.id.buttonstart);  
buttonStop = (Button)findViewById(R.id.buttonstop); 

То же самое относится к вашим двум вызовам setOnClickListener() внизу,Они должны быть внутри метода.Я бы посоветовал переместить эти два блока в onCreate() также после вызовов findViewById().


Редактировать: трассировка стека указывает, что ваше приложение пытается запустить действие с именем TestVideoNetActivity.Ваша фактическая деятельность называется VideoCapture.

Откройте AndroidManifest и найдите деталь, которая выглядит следующим образом:

    <activity
        android:name=".TestVideoNetActivity"
        ... >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

Изменить TestVideoNetActivity на VideoCapture .Также убедитесь, что ваши пакеты совпадают, в верхней части вашего манифеста должна быть строка package="X" и строка package X; в верхней части исходного файла java.Убедитесь, что они имеют одинаковое значение для X.


Редактировать 2: Ваша вторая трассировка стека показывает, что setAudioSource() не удалось.Все, что я могу думать, это то, что у вас не установлены правильные разрешения для доступа к микрофону.Добавьте следующие строки в ваш android-манифест (это также относится и к разрешению камеры, поскольку оно вам также необходимо) :

<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />

Добавьте их внутри тега <manifest>, новне тега <application>.Например, после строки <uses-sdk>, если она у вас есть (я думаю, она включена по умолчанию).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...