【问题标题】:Android Record a videoAndroid 录制视频
【发布时间】:2011-12-25 20:53:32
【问题描述】:

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

我在互联网上找到了一些示例,但没有任何效果。 Normaly,我必须使用MediaRecorder

你能给我一个简单的例子吗,我不需要将视频可视化何时是令牌,只需将它注册到我的sdcard上就可以了。

这是我正在尝试做的一个例子:

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

【问题讨论】:

  • 如果您展示了您尝试过的具体内容以及无效的内容,我们可以为您提供帮助。为您提供另一个示例,您说您找到的许多示例并不能为您解决任何问题。当多个示例不起作用时,您可能会误解某些内容。
  • 这是我的代码@alextsc

标签: android record video-recording


【解决方案1】:

正如猜测的那样,您做错了一些与实际视频录制无关的事情。

第一个问题:

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

你不能在这里打电话给findViewById()findViewById() 仅在活动当前视图层次结构中搜索。在你的类被实例化的时候,不存在视图层次结构。这些类成员将始终为 null,因为如果找不到视图,则返回该值。您可以保留变量声明,但在调用setContentView() 之后将搜索部分移动到onCreate(),例如:

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

底部的两个setOnClickListener() 调用也是如此。它们必须在方法中。我建议在 findViewById() 调用之后将这两个块也移到 onCreate() 中。


编辑:堆栈跟踪表明您的应用程序尝试运行名为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" />

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

【讨论】:

  • 好的,谢谢你的帮助。我已经完成了,但我的程序仍然会立即出现错误。
  • 您遇到什么错误? “强制关闭”对话框?在这种情况下,您可以提供堆栈跟踪吗?您可以从 logcat 中获取,在 eclipse 中使用 Window -&gt; Show View -&gt; Logcat。应出现系统日志。运行您的应用程序并让它崩溃。日志内应出现一个大红色斑点。请张贴这个。
  • logcat 对于评论来说太大了,这是链接,我上传了一个错误的 Word 文件:link 再次感谢我们的大力帮助。
  • 是的,cmets 不适合这个。不过,您将来可以将其编辑到您的问题中,现在就为您完成。我会在几秒钟内编辑我的答案。
  • 哦,是的,没错……我改了这个,但错误仍然存​​在……嗯……我将把新的 logcat 放在我的问题上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-14
  • 2016-08-07
  • 1970-01-01
  • 2012-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多