Android录制视频

时间:2011-12-25 20:53:33

标签: android record video-recording

我正在尝试在我的android项目上录制视频。

我在互联网上找到了一些例子但没有任何效果。 Normaly,我必须使用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();  
        }
    }); 
}

堆栈跟踪:

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 个答案:

答案 0 :(得分:1)

正如猜测的那样,你做了一些与实际视频录制没有任何关系的错误。

第一个问题:

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

您无法在此处致电findViewById()findViewById()仅在活动当前视图中搜索层次结构。在你的类被实例化的时候,没有视图层次存在。这些类成员将始终为null,因为如果无法找到该视图,则会返回该成员。您可以保留变量声明,但在致电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",java源文件顶部应该有一行package X;。确保它们具有相同的X值。


编辑2:您的第二个堆栈跟踪表明setAudioSource()失败。我能想到的是,您没有设置正确的权限来访问麦克风。将以下行添加到您的android-manifest (这也包括相机权限,因为您也需要它)

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

将它们添加到<manifest>标记内,但在<application>标记之外。例如。在<uses-sdk>行之后,如果你有一行(默认包含在内,我相信)。