标签: android-mediarecorder

Android getSupportedVideoSizes始终返回null

MediaRecorder在Android上需要一些帮助.

我尝试使用getSupportedVideoSizes获取支持的视频大小列表,但它始终返回null.

在测试中,以下设备nullgetSupportedVideoSizes查询时返回:

  • Galaxy Nexus(Android 4.2)
  • HTC One Mini(Android 4.4.2)
  • HTCEVOV4G(Android 4.0.3)

android mediarecorder android-mediarecorder

7
推荐指数
1
解决办法
4097
查看次数

Android MPEG2TS Writer的问题

您好我正在尝试使用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问题.

c++ android android-source mpeg2-ts android-mediarecorder

7
推荐指数
0
解决办法
552
查看次数

Android MediaPlayer错误无法播放此视频

我正在开发用于视频录制的自定义相机应用.录制的视频存储在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)

video android android-mediarecorder

7
推荐指数
1
解决办法
898
查看次数

android中的视频质量?

我正在使用媒体录制器类录制视频,我使用以下属性初始化录制器,

    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相机上拍摄的视频不一样,我使用媒体记录器拍摄的视频与原生视频相比质量较差,如何提高视频质量.

如果有人知道我帮助我.谢谢

android android-layout android-mediarecorder

6
推荐指数
1
解决办法
1万
查看次数

如何以MPEG-2 TS输出和ACC音频编码格式录制视频

当我设置视频格式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 aac video-streaming mpeg2-ts android-mediarecorder

6
推荐指数
1
解决办法
5057
查看次数

在Android媒体录制器中预览显示

在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)

所以我可以使用上面的代码重新编码视频,但无法在录制开始前显示预览.请帮助我在我失踪的地方.因为在重新编码视频之前会显示黑屏.

提前致谢.

android surfaceview android-mediarecorder

6
推荐指数
1
解决办法
5070
查看次数

将mpeg4视频与mp4Parser相结合 - 安卓产生了静态视频

我正在使用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)

android-mediarecorder mp4parser

6
推荐指数
1
解决办法
1989
查看次数

在onLongClickListener中调用MediaRecorder.start时在android.media.MediaRecorder.start上的java.lang.IllegalStateException

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

6
推荐指数
1
解决办法
9582
查看次数

如何在android中使用Mediaprojection库来捕获屏幕并转换成mp4文件?

从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文件,用于我的屏幕录制应用程序.请帮我解决这个问题.

android android-mediarecorder android-mediaprojection

6
推荐指数
1
解决办法
7715
查看次数

通过相机录制视频,无需镜像,就像快照聊天一样

我正在研究社交移动应用.它可以选择录制个人资料视频.我的刻录机的问题是它反映了实际的视频.我知道这是默认行为,但希望它像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

6
推荐指数
1
解决办法
1187
查看次数