我MediaRecorder在Android上需要一些帮助.
我尝试使用getSupportedVideoSizes获取支持的视频大小列表,但它始终返回null.
在测试中,以下设备null在getSupportedVideoSizes查询时返回:
您好我正在尝试使用mediarecorder api并生成包含h264视频和aac音频的mpeg2ts输出.
1)当我单独录制视频时,生成的输出.ts文件工作正常,没有任何延迟.2)当我录制音频和视频时,应用程序崩溃.所以我在网上进行了一些搜索,发现它是AOSP框架中的MPEG2TS writer.cpp中的一个错误,基于这个链接,<< code.google.com/p/android/issues/detail?id=37714> >我应用了建议的补丁并尝试了同样的方法.我能够对音频和视频进行编码,但生成的输出文件存在问题.
3)作者没有正确的工作.有滞后.首先播放视频帧,然后在视频冻结时播放音频,然后播放.
4)编写器代码可以在这里找到 - > << androidxref.com/4.2.2_r1/xref/frameworks/av/media/libstagefright/MPEG2TSWriter.cpp >>
我添加的补丁可以在这里找到 - > << code.google.com/p/android/issues/attachmentText?id=37714&aid=377140007000&name=patch&token=E7rjXqE55TIp50S7sI04mxbsRCA%3A1384836153502 >>
5)有人请告诉我作者的问题是什么,如何在代码中修复它,请提供一些固定的代码片段.
我的android源代码是:
myCamera = getCameraInstance();
mediaRecorder = new MediaRecorder();
myCamera.unlock();
mediaRecorder.setCamera(myCamera);
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediaRecorder.setOutputFormat(8);
mediaRecorder.setOutputFile("/sdcard/myvideo.ts");
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mediaRecorder.setVideoSize(320, 240);
mediaRecorder.setVideoFrameRate(15);
mediaRecorder.setMaxDuration(20);
mediaRecorder.setMaxFileSize(10000);
mediaRecorder.setPreviewDisplay(myCameraSurfaceView.getHolder()
.getSurface());
Run Code Online (Sandbox Code Playgroud)
6)一旦我让ts编写器工作,我需要通过RTP发送ts数据包进行直播,所以请帮助修复ts writer问题.
我正在开发用于视频录制的自定义相机应用.录制的视频存储在SD卡上.该代码适用于所有设备,除了T-Mobile S3(SGH-T999 android v 4.1.2),我得到'无法播放此视频'错误.我已经研究了很多这个问题,尝试改变参数但仍然无法解决.
W/VideoView( 4490): Unable to open content: /storage/sdcard0/MyCameraApp/VID_20140807_130327.ogg
W/VideoView( 4490): java.io.IOException: setDataSourceFD failed.: status=0x80000000
W/VideoView( 4490): at android.media.MediaPlayer.setDataSource(Native Method)
W/VideoView( 4490): at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1204)
W/VideoView( 4490): at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1175)
W/VideoView( 4490): at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1121)
W/VideoView( 4490): at android.media.MediaPlayer.setDataSource(MediaPlayer.java:953)
W/VideoView( 4490): at android.widget.VideoView.openVideo(VideoView.java:249)
W/VideoView( 4490): at android.widget.VideoView.access$2000(VideoView.java:51)
W/VideoView( 4490): at android.widget.VideoView$6.surfaceCreated(VideoView.java:492)
W/VideoView( 4490): at android.view.SurfaceView.updateWindow(SurfaceView.java:609)
W/VideoView( 4490): at android.view.SurfaceView.access$000(SurfaceView.java:86)
W/VideoView( 4490): at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:178)
W/VideoView( 4490): at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:707)
W/VideoView( 4490): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1955)
W/VideoView( 4490): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1119)
W/VideoView( 4490): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4553)
W/VideoView( …Run Code Online (Sandbox Code Playgroud) 我正在使用媒体录制器类录制视频,我使用以下属性初始化录制器,
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
Run Code Online (Sandbox Code Playgroud)
但是视频的质量与我在本机Android相机上拍摄的视频不一样,我使用媒体记录器拍摄的视频与原生视频相比质量较差,如何提高视频质量.
如果有人知道我帮助我.谢谢
当我设置视频格式MPEG-2(常数值8)TS和音频格式ACC(常数值3)时,它仅以ACC格式记录视频而没有音频.但它没有给出任何错误.我试过三星Galaxy Tab(Honeycomb).因为MPEG-2TS支持Android 3.0版以上版本.如果我使用默认的视频和音频格式,它可以正常工作.我怎样才能做到这一点.请帮忙.
if(mCamera == null) {
mCamera = Camera.open();
mCamera.unlock();
}
if(mMediaRecorder == null) mMediaRecorder = new MediaRecorder();
mMediaRecorder.setPreviewDisplay(surface);
mMediaRecorder.setCamera(mCamera);
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mMediaRecorder.setOutputFormat(8);
mMediaRecorder.setOutputFile("/mnt/sdcard/temp.ts");
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mMediaRecorder.setVideoSize(640, 480);
mMediaRecorder.setVideoEncodingBitRate(500000);
mMediaRecorder.setAudioEncodingBitRate(44100);
mMediaRecorder.setVideoFrameRate(30);
mMediaRecorder.setMaxDuration(-1);
mMediaRecorder.prepare();
Run Code Online (Sandbox Code Playgroud) 在android中如何在媒体记录器启动之前显示预览表面.我的应用程序具有视频录制功能,当我导航到视频录制片段时,它显示黑屏,当我开始使用开始录制相机预览录制时,显示和录制开始.
如何在录制前开始预览.我添加了我在onCreateView()片段中使用的代码 -
surfaceHolder = mySurfaceView.getHolder();
camera = Camera.open();
if(camera!=null){
camera.setDisplayOrientation(90);
Camera.Parameters param;
param = camera.getParameters();
param.setPreviewFrameRate(20);
param.setPreviewSize(176, 144);
camera.setParameters(param);
camera.setPreviewDisplay(surfaceHolder);
}
mediaRecorder = new MediaRecorder();
camera.unlock();
mediaRecorder.setCamera(camera);
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
CamcorderProfile camcorderProfile_HQ = CamcorderProfile
.get(CamcorderProfile.QUALITY_HIGH);
mediaRecorder.setProfile(camcorderProfile_HQ);
String filePath = getOutputMediaFile(MEDIA_TYPE_VIDEO).getPath();
fileUri = getOutputMediaFileUri(MEDIA_TYPE_VIDEO);
mediaRecorder.setOutputFile(filePath);
Run Code Online (Sandbox Code Playgroud)
以及我在开始按钮点击时使用的代码 -
mediaRecorder.setPreviewDisplay(surfaceHolder.getSurface());
mediaRecorder.prepare();
mediaRecorder.start();
Run Code Online (Sandbox Code Playgroud)
所以我可以使用上面的代码重新编码视频,但无法在录制开始前显示预览.请帮助我在我失踪的地方.因为在重新编码视频之前会显示黑屏.
提前致谢.
我正在使用mp4Parser isoviewer-1.0-RC-35.jar来组合使用android MediaRecorder录制的剪辑.通过聆听音轨,剪辑似乎正确组合,但视频保持在一帧上,时间码在播放时保持为零.
媒体记录器创建单个剪辑时的代码
mediaRecorder = new MediaRecorder();
myCamera.lock();
myCamera.unlock();
String clipLocation = file.getAbsolutePath();
_moviePaths.add(clipLocation);
// Please maintain sequence of following code.
// If you change sequence it will not work.
mediaRecorder.setCamera(myCamera);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
if (facingBack) {
mediaRecorder.setOrientationHint(90);
} else {
mediaRecorder.setOrientationHint(270);
}
// Log.v("cam","supported vid sizes: "+
// myCamera.getParameters().getSupportedVideoSizes());
CamcorderProfile profile = CamcorderProfile
.get(CamcorderProfile.QUALITY_720P);
// mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
//mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
// mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mediaRecorder.setMaxDuration(g.kMaxVideoDurationInMiliseconds);// 15seconds
mediaRecorder.setProfile(profile);
mediaRecorder.setPreviewDisplay(surfaceHolder.getSurface());
mediaRecorder.setOutputFile(path + filename);
mediaRecorder.prepare();
startTimer();
mediaRecorder.start();
}
Run Code Online (Sandbox Code Playgroud)
我用来组合剪辑的方法:
protected void combineClips() throws IOException{
for(int i=0; …Run Code Online (Sandbox Code Playgroud) MediaRecorder当我按住按钮时,我想开始录制语音消息.IllegalStateException当我试图开始录制时,我正在尝试onLongClickListener.
我在堆栈跟踪中记录的错误是在第219行: recorder.start()
为什么会这样?
btnSendVoice.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
isVoiceButtonHeld = true;
startRecording();
return false;
}
});
btnSendVoice.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
view.onTouchEvent(event);
if (event.getAction() == MotionEvent.ACTION_UP) {
if (isVoiceButtonHeld) {
isVoiceButtonHeld = false;
stopRecording();
}
}
return false;
}
});
private void startRecording() {
Toast.makeText(getActivity(), "Recording Message", Toast.LENGTH_SHORT).show();
filename = Environment.getExternalStorageDirectory().getAbsolutePath() + "/audiotest.3gp";
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setOutputFile(filename);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
try { recorder.prepare(); …Run Code Online (Sandbox Code Playgroud) android illegalstateexception mediarecorder android-mediarecorder
从Android 5.0开始,他们提供媒体投影库来捕获屏幕内容.但他们提供的示例演示应用程序并不清楚.您可以在此处找到示例应用.在该应用程序中,他们使用virtualdisplay方法投影捕获的屏幕
private void setUpVirtualDisplay() {
Log.i(TAG, "Setting up a VirtualDisplay: " +
mSurfaceView.getWidth() + "x" + mSurfaceView.getHeight() +
" (" + mScreenDensity + ")");
mVirtualDisplay = mMediaProjection.createVirtualDisplay("ScreenCapture",
mSurfaceView.getWidth(), mSurfaceView.getHeight(), mScreenDensity,
DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
mSurface, null, null);
mButtonToggle.setText(R.string.stop);
}
Run Code Online (Sandbox Code Playgroud)
我想将捕获的屏幕转换为mp4文件,用于我的屏幕录制应用程序.请帮我解决这个问题.
我正在研究社交移动应用.它可以选择录制个人资料视频.我的刻录机的问题是它反映了实际的视频.我知道这是默认行为,但希望它像sanpchat一样工作.
预习
录制和播放后
这是我的代码
// return camera instance when activity open first time
private Camera getCameraInstance() {
// TODO Auto-generated method stub
releaseCamera();
releaseMediaRecorder();
Camera c = null;
try {
cameraId = findFrontFacingCamera();
if (cameraId < 0) {
cameraId = findBackFacingCamera();
}
c = Camera.open(cameraId);
// setCameraDisplayOrientation(this,cameraId,c);
//setCameraDisplayOrientation(this, cameraId, c);
c.setDisplayOrientation(90);
} catch (Exception e) {
// Camera is not available (in use or does not exist)
}
return c; // returns null if camera is unavailable
}
// return …Run Code Online (Sandbox Code Playgroud) android video-recording android-camera android-mediaplayer android-mediarecorder