标签: android-mediarecorder

Android 如何将捕获的视频设置为 .mp4 而不是 .3gp

我使用默认相机来捕获视频:

Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
intent.putExtra(MediaStore.EXTRA_DURATION_LIMIT,MAX_DURATION);
intent.putExtra(MediaStore.EXTRA_SIZE_LIMIT, MAX_SIZE_BYTES);
startActivityForResult(intent, CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE);    
Run Code Online (Sandbox Code Playgroud)

如何将文件容器设置为 .mp4 而不是 .3gp?

android-camera android-camera-intent android-mediarecorder

5
推荐指数
1
解决办法
1404
查看次数

Android Camera2 MediaRecorder 在录制过程中裁剪视频

我需要构建一个以 16:9 比例记录的相机应用程序,该应用程序与 1280x720 的记录设备的全高相匹配,android MediaRecorder 只返回每个设备的非常具体的尺寸,在记录期间可以支持,并且大多数设备 1280x720 可用并按预期工作,但是对于某些设备,例如 Galaxy S4,录制的视频返回拉伸和变形,原因是 Galaxy s4 尺寸为 1920x1080。

现在,android Camera2 google 示例以 4:3 的纵横比拍摄,这为视频质量产生了正确的纵横比,但不是我所追求的预期尺寸,从我的研究看来,我唯一的选择是以 4:3 录制并对视频进行某种裁剪,使其更接近 16:9 1280x720 范围,是否可以使用 MediaRecorder 或替代框架来完成此操作?

java video android aspect-ratio android-mediarecorder

5
推荐指数
0
解决办法
598
查看次数

如何在android中播放.opus音频文件?

我正在开发一个应用程序,用于使用谷歌云语音 API 识别语音并同时录制音频。git link 我试图播放录制的 .opus 音频文件,但出现 IOException W/System.err: java.io.IOException: setDataSource failed.

任何的想法??谢谢!!

audio android android-mediarecorder opus google-cloud-speech

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

MediaRecorder.AudioSource 中 VOICE_COMMUNICATION 和 MIC 的区别

我正在使用媒体录音机在 android 中使用VOICE_COMMUNICATION&MIC模式记录通话。

RECORD_SOURCE = MediaRecorder.AudioSource.VOICE_COMMUNICATION; //RECORD_SOURCE = MediaRecorder.AudioSource.MIC; iAudioRecorder = new AudioRecord(RECORD_SOURCE, NATIVE_SAMPLE_RATE, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, RECORD_BUF_UNIT);

我看到MIC录制的音频数据比VOICE_COMMUNICATION某些设备的增益大得多 (大约 2/3 倍)。此外,所捕获的背景音乐VOICE_COMMUNICATION也不如MIC.

为什么这两种录音模式的音频质量(如增益、响应能力)不同?

android audio-recording android-mediarecorder android-audiorecord

5
推荐指数
1
解决办法
9706
查看次数

使用媒体投影和媒体录像机产生损坏的视频

我正在尝试使用在棒棒糖设备(android 5 及更高版本)上可用的媒体投影 api,现在我意识到了在 android 上使用这个 api 的两种方法:

第一种方式:

使用媒体编解码器和媒体复用器。

第二种方式

使用媒体记录器类。

我做了什么:

我使用了第一个媒体编解码器,它在不同的设备上运行良好,但是当我需要添加音频时出现了问题(看起来有点复杂)。

然后我尝试使用媒体记录器,因为其他人使用它并且添加音频似乎很简单,所以我做了这样的事情:

//set a media recorder
try{
MediaRecorder mediarecorder = new MediaRecorder();
mediarecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediarecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mediarecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediarecorder.setOutputFile(path_file);
mediarecorder.setVideoSize(480, 270);
mediarecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mediarecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mediarecorder.setVideoEncodingBitRate(70000);
mediarecorder.setVideoFrameRate(30);

mediarecorder.prepare();

}catch(IOException e){


}

//density
Metrics metrics = getReources().getDisplayMetrics();
int density = metrics.densityDpi;

//set virtual display

media_projection.createVirtualDisplay("name",480,270,denisty,DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR, mediarecorder.getSurface(),null,null);

//start
mediarecorder.start();
Run Code Online (Sandbox Code Playgroud)

我是硬编码:width, height,frame rate并且bitrate因为我需要控制输出视频,因为视频往往会变大。

我的问题:

使用媒体记录器方法,我在测试 api 时发现了一个问题,我使用了 2 个不同的设备(android 7 和 android 6),它们的屏幕密度不同,但它们的大小大致相同:

Android 7 设备(分辨率:720x1280):

我得到了完美的结果没问题(这个设备是更高分辨率的设备)。

Android …

android android-mediarecorder android-mediaprojection android-mediacodec

5
推荐指数
0
解决办法
706
查看次数

当媒体录制暂停时,媒体播放器不播放录制内容

我正在开发一个应用程序,用户可以在其中录制音频,如果 api 级别高于 23,则暂停它。并且用户可以收听暂停的录音。
但我发现,用户无法收听暂停的音频。但我想要的是用户可以收听暂停的音频

当录音停止时,它可以播放,因为它存储在本地路径中。
我还检查了 android 文档和许多关于堆栈溢出的答案,例如如何播放暂停的音频,但我找不到任何特定的链接。

我在这里分享我的问题。如果您有任何解决方案或找到任何链接如何解决我的问题,我们将不胜感激。

即使我需要分享我的代码,也请告诉我。因为我认为没有必要共享代码。因为当用户停止录音时,它应该可以播放。

下面是我的代码

public class AudioRecordingActivity extends BaseActivity
    implements AppDialog.IYesListener,
    AppDialog.IDiscardRecordingListener, AppDialog.ICancelRecordingListener,
    PlayAudioManager.IVoiceCompleteListener,
    MediaRecorder.OnInfoListener {

private static final Logger LOGGER = LoggerFactory.createLogger(AudioRecordingActivity.class);
private TaskDetailsViewModel mViewModel;
private ActivityAudioRecordingBinding mBinding;
private AssignmentIdsModel mAssignmentIdModel;
private long mStartTime = 0;
private long mPauseTime=0;
private MediaRecorder mRecorder;
private File mOutputFile;
public final ObservableField<Integer> mAudioState = new ObservableField<>(0);
private String mAudioPath;
private int mMaxAudioTime;
private int[] amplitudes = new int[100];
private int i = 0;
private Handler …
Run Code Online (Sandbox Code Playgroud)

android android-mediaplayer android-mediarecorder

5
推荐指数
1
解决办法
326
查看次数

用于录制视频的 CameraX 和 MediaRecorder

我尝试在这里使用 CameraX PreviewView

            <androidx.camera.view.PreviewView
                android:id="@+id/camPreviewView"
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>
Run Code Online (Sandbox Code Playgroud)

我可以使用 MediaProjection 为整个屏幕录制视频。

但是现在,我只需要记录相机视图。我尝试使用 MediaRecorder 中的 setPreviewDisplay,但由于我使用的是 PreviewView,我不知道如何获取表面。

我也尝试使用 MediaRecorder 的 setCamera,但它已被弃用。它建议使用 getSurface 代替。

有没有将 MediaRecorder 与 CameraX PreviewView 一起使用的示例?

CameraX 有 VideoCapture,但由于某种原因,我无法使用它。我需要使用 MediaRecorder 和 CameraX PreviewView 来录制文件。

有什么建议吗?

android android-mediarecorder android-camerax

5
推荐指数
0
解决办法
157
查看次数

开始视频录制时,屏幕会闪烁并调整大小

我正在将照片/视频捕捉整合到我的应用中,并且遇到视频捕捉问题.每当视频录制开始时,屏幕会闪烁,我会暂停一下,然后开始录制视频.但是,使用手机的相机应用程序,根本没有闪烁/暂停.

此外,我的相机预览显示会recorder.start()在调用后立即调整大小.我不明白为什么会这样.它使预览失真(一切看起来都是压扁和更宽).

我的问题:如何在开始视频录制时阻止闪烁/暂停?如何防止recorder.start()调整预览显示的大小?

每当启用"视频模式"时,initRecording()立即调用.一旦用户按下按钮,startRecording()就会被调用.最后,当再次按下该按钮时,将stopRecording()被调用.不太重要的是,当切换回"图像模式"时,destroyRecorder()被称为.

@Override
public void onResume() {

    super.onResume();

    Camera camera = null;
    try {
        camera = Camera.open();
    }
    catch (Exception e) {
        // Camera isn't available
        Toast.makeText( getActivity(), "Camera is not available at this time.", Toast.LENGTH_SHORT ).show();
        getActivity().finish();
        return;
    }

    if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD ) {
        setCameraDisplayOrientation( camera );
    }
    else {
        camera.setDisplayOrientation( 90 );
    }

    setCamera( camera );
    setCameraZoomDisplay( camera );

    if ( getSurfaceHolder() …
Run Code Online (Sandbox Code Playgroud)

android surfaceview android-camera android-mediarecorder

4
推荐指数
1
解决办法
2217
查看次数

如何检查另一台刻录机是否正在运行?

我使用AudioRecord API在我的应用程序中录制音频(WAV),并成功录制.但是当我尝试录制其他录制应用程序在后台运行时,我的应用程序表现得很奇怪.

MediaRecorder试图启动,而另一个记录正在运行,但AudioRecord API初始化记录实例,并不会引发任何异常记录时,API抛出异常,所以我不能确定任何记录实例是否正在运行与否.

这个场景已经在三星S3的默认录音机中处理,当我尝试录音时说

"无法开始新的录制.其他已经录制的应用程序"

在我的应用程序的录音机启动之前,如何识别是否有其他录音机正在运行?

android android-mediarecorder android-audiorecord

4
推荐指数
1
解决办法
4422
查看次数

mediavieworder更改了mediarecorder.Start()

这个问题类似于这里,这里,这里,这里这里的帖子,但我被困住了,花了好几个小时试图解决它.

我有一个摄像机预览(现在总是以正确的方向显示),但是当我点击记录(mediaRecorder.start();)时,视频方向会改变.我尝试过使用setOrientationHint,但它似乎没有什么区别(如下面代码中的注释所标记).

它会影响我的测试设备(Galaxy和Jelly Bean上的Xperia).我该怎么做才能解决这个问题?

这是我的代码:

XML

<RelativeLayout android:id="@+id/surface_camera"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_centerInParent="true"
    android:layout_weight="1"
    >

    <RelativeLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
        <FrameLayout
            android:id="@+id/videoview"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"/>
        <Button
            android:id="@+id/mybutton"
            android:layout_width="100dp"
            android:layout_height="50dp"
            android:layout_centerHorizontal="true"
            android:layout_alignParentBottom="true"
            android:text="REC"
            android:textSize="12dp"/>
    </RelativeLayout>

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

Java的

package hockeyj.androidlisttesting;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import android.app.Activity;
import android.content.Context;
import android.hardware.Camera;
import android.media.CamcorderProfile;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.view.Display;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button; …
Run Code Online (Sandbox Code Playgroud)

android android-camera android-mediarecorder

4
推荐指数
1
解决办法
5062
查看次数