- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我尝试从相机录制视频时似乎出现错误准备失败:-1。
我搜索了很多,但我无法从任何地方得到任何可接受的答案。下面是我的代码。
我不知道参数?并通过解锁相机。谁能做到,将不胜感激。
package com.camara.activity;
import java.io.IOException;
import android.content.Context;
import android.hardware.Camera;
import android.media.MediaRecorder;
import android.util.AttributeSet;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class CamcorderView extends SurfaceView implements
SurfaceHolder.Callback {
MediaRecorder recorder;
SurfaceHolder holder;
String outputFile = "/sdcard/default.mp4";
public CamcorderView(Context context, AttributeSet attrs) {
super(context, attrs);
holder = getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
recorder.setVideoSize(480, 320);
recorder.setVideoFrameRate(10);
recorder.setMaxDuration(10000);
}
public void surfaceCreated(SurfaceHolder holder) {
recorder.setOutputFile(outputFile);
recorder.setPreviewDisplay(holder.getSurface());
if (recorder != null) {
try {
recorder.prepare();
} catch (IllegalStateException e) {
Log.e("IllegalStateException", e.toString());
} catch (IOException e) {
Log.e("IOException", e.toString());
}
}
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
public void surfaceDestroyed(SurfaceHolder holder) {
}
public void setOutputFile(String filename) {
outputFile = filename;
recorder.setOutputFile(filename);
}
public void startRecording() {
recorder.start();
}
public void stopRecording() {
recorder.stop();
recorder.release();
}
}
下面是logcat的输出
01-10 17:33:00.450: I/MediaRecorderJNI(14046): prepare: surface=0x243398 (id=1)
01-10 17:33:00.500: E/MediaRecorder(14046): prepare failed: -1
01-10 17:33:00.500: E/IOException(14046): java.io.IOException: prepare failed.
提前致谢。
最佳答案
好吧,我真的发现了我的错误。因为当然有错误。实际上我想同时进行预览和录制,并认为我必须为此使用对象 Camera。但实际上 MediaRecorder 自己使用 SetDisplayPreview 和 .... MediaRecord.Prepare :)
我心情很好,所以这就是所有类(class);)
import java.io.File;
import java.io.IOException;
import android.content.Context;
import android.media.CamcorderProfile;
import android.media.MediaRecorder;
import android.media.MediaRecorder.OnInfoListener;
import android.os.Environment;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.FrameLayout;
public class ModuleVideo implements SurfaceHolder.Callback, OnInfoListener
{
public static final int STATE_NONE = -1;
public static final int STATE_STOPPED = 0;
public static final int STATE_PREVIEW = 1;
public static final int STATE_CAPTURE = 2;
public static final int STATE_RECORDING = 3;
private SurfaceHolder mHolder;
private MediaRecorder mRecorder;
private SurfaceView mCameraView;
private Context mContext;
private FrameLayout mParent;
private int mState;
private boolean mRecording;
public ModuleVideo(Context context, FrameLayout parent)
{
//Initiate the Surface Holder properly
mParent = parent;
mContext = context;
mRecorder = null;
mState = STATE_NONE;
mRecording = false;
}
private void Init()
{
mRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
mRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
CamcorderProfile camcorderProfile_HQ = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
mRecorder.setProfile(camcorderProfile_HQ);
mRecorder.setOutputFile("/sdcard/MY_VIDEO.mp4");
}
private void Prepare()
{
try
{
mRecorder.setPreviewDisplay(mHolder.getSurface());
mRecorder.prepare();
}
catch (IllegalStateException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
public void UI_StartPreview()
{
if(mState == STATE_STOPPED || mState == STATE_NONE)
{
mRecorder= new MediaRecorder();
Init();
mCameraView= new SurfaceView(mContext);
mParent.addView(mCameraView);
this.mHolder = mCameraView.getHolder();
this.mHolder.addCallback(this);
this.mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
}
public void UI_StopPreview()
{
if(mState == STATE_PREVIEW)
{
if(mRecording)
{
UI_StopRecord();
}
if(mRecorder != null)
{
mRecorder.release();
mRecorder= null;
}
mParent.removeView(mCameraView);
//mCameraView= null;
}
}
public boolean UI_StartRecord()
{
if(mState != STATE_PREVIEW )
{
return false;
}
String path= "/sdcard/PLUS_VIDEO.mp4";
String state = android.os.Environment.getExternalStorageState();
if(!state.equals(Environment.MEDIA_MOUNTED))
{
return false;
}
File directory = new File(path).getParentFile();
if(!directory.exists() && !directory.mkdirs())
{
return false;
}
mRecorder.start();
mRecording= true;
mState= STATE_RECORDING;
return true;
}
public void UI_StopRecord()
{
if(mRecorder != null)
{
mRecorder.stop();
mRecorder.reset();
Init();
Prepare();
mRecording= false;
mState= STATE_PREVIEW;
}
}
public boolean UI_IsRecording()
{
return mRecording;
}
@Override
public void onInfo(MediaRecorder mr, int what, int extra)
{
// TODO Auto-generated method stub
Log.i(null, "onInfo");
}
@Override
public void surfaceCreated(SurfaceHolder holder)
{
Prepare();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
{
mState= STATE_PREVIEW;
}
@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
mState= STATE_STOPPED;
}
}
关于android - 准备失败 : -1 media recorder in android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8803100/
当我想用这个名为 Asfbin 的神奇工具拆分教程视频文件( .wmv )时,查看了媒体播放器中的所有设置,但徒劳地找不到一个... 有没有办法用milliseconds设置windows media
在我的应用程序API级别targetSdkVersion 23中,我添加了以下权限:
出于某种原因,当我发送电子邮件时,我的媒体查询没有应用。我将它从 Outlook 2007 发送到 gmail 并使用 iphone 4s 查看它。我试过使用更简单的@media 查询规则(即仅更改字
我看了一本学习python编程的书,它显示了代码: import media 所以我从链接http://pragprog.com/titles/gwpy/source_code 下载了gwpy-cod
我正在尝试使用一个小的 from,只有 3 个元素。这是我正在使用的,有人可以让我知道我哪里出错了吗?我已尝试同时使用最小宽度和最大宽度,但似乎没有任何效果。 html,body{margin:0p
要修复的网站问题: 我想弄清楚为什么我的一些@media 查询是重叠的。如果您查看我的代码,您会看到 @media 查询被标记为每个设备维度。 @media SCREEN SIZE: MASSIVE
我正在编辑一个预先存在的样式表。它目前有 0-319px 和 320-479px 的@media 部分,以及其他一些用于更大屏幕的部分。我正在尝试添加特定于 iPhone 的样式。但是,我的iphon
我读到在其他@media 查询中嵌套@media 查询在CSS3 中是完全有效的。 但是,我通过 CSS 验证器收到以下解析错误: @media screen and (max-width: 768p
我面临的情况是,对于我的一个类(class),@media 查询只是没有被读取,相反,即使 @media 标准正在被读取,类也没有围绕 @media 查询被读取的情况遇见了。 这是代码: @media
如果我从 android webrtc SDK(由 antmedia 提供)流式传输到 Ant Media 的社区版,则保存的最终视频会出现拉伸(stretch)(以手机纵向模式拍摄)。 Check
我想知道 Mobicent Media 服务器如何使用 URL 播放音频的详细信息?它在哪种方法中使用 URL 进行流式传输。对于本地存储,我了解但对于远程存储(URL),我不知道它是如何工作的。我在
简单是辉煌的关键。 我看到了 @media print 和 @media screen 标签背后的一些意义。但是将 @media screen 与(@media all 而不是打印)进行比较让我感到困
我有以下 sass: .branded @media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (m
我都试过了,得到的结果相似。一直找不到答案。 最佳答案 开头和结尾的斜杠分别对匹配的内容添加了限制。 media:没有斜线,匹配当前目录和所有子目录下的文件和目录。 media/:尾部加斜杠表示只匹配
我正在尝试让 Enquire.js 为旧版浏览器工作。我正在使用文档中的深度支持方法: Modernizr.load([ { test: window.matchMedia,
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
我希望将 H264 视频流式传输到 Windows Phone 8 应用程序。 那么我该如何使用 ShardDX 呢? (或者可能来自媒体基金会的 native 功能)。 我找到了用于播放视频的 Me
我想使用 cordova 录制用户的音频。在研究中,我发现了两个似乎可以完成这项工作的插件。第一media plugin及其他media capture plugin .现在我的问题是我可以从两个插件
我正在尝试弄清楚如何构建我的 CSS 文件(现在已经很多了),我想知道拥有以下内容之间是否有任何实际区别: 或拥有: @media print { definitions } 我是从浏览器的
这个问题在这里已经有了答案: Media=All vs Media=Screen (2 个答案) 关闭 8 年前。
我是一名优秀的程序员,十分优秀!