Android音视频开发(四)MediaRecorder录制音频

安卓使用MediaRecorder(1)录制音频的详细使用 引言 使用 MediaRecorder 的步骤 常见问题及解决思路 无法访问存储卡目录 录制的音频文件没有声音 录制过程中出现异常 MediaRecorder无法正常启动 录制的音质或者画质很差 录制的文件无法播放 结语 阅读详情

Android 多媒体框架针对音频录制提供了两种方法:MediaRecorder和AudioRecord。

区别

  • MediaRecorder:录制的音频文件是经过压缩后的,需要设置编码器,并且录制的音频文件可以用系统自带的播放器播放。MediaRecorder属于系统Api高度封装,所以可扩展性和可用性都比较局限,支持的格式过少并且无法实时处理音频数据,使用场景如语音消息录制等,值得一提的是MediaRecorder通常和视频录制一起使用。

  • AudioRecord:主要实现对音频实时处理以及边录边播功能,录制的是PCM语音数据,如果保存成音频文件,是不能够被播放器播放的,需要用AudioTrack来播放,当然也可以对数据进行编码压缩,从而转换成我们常见的音频格式。使用的场景有实时音频传输,音视频录制处理等等,以后涉及到音视频编解码时会用到。

MediaRecorder的使用

MediaRecorder执行流程如下:官方Api介绍
在这里插入图片描述
总的来说就是:初始化–>设置数据源–>准备–>开始工作–>停止工作–>释放资源
资料:支持的媒体格式
具体参考下面代码:

class MediaActivity : AppCompatActivity() {
	//音频播放器
    private var mediaPlayer: MediaPlayer? = null
    //音频录制
    private var mediaRecorder: MediaRecorder? = null

    //是否正在录制
    private var isRecording = false

    //文件保存位置
    private lateinit var filePath: String

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_media)
        filePath = "${externalCacheDir!!.absolutePath}/test.3gp"
    }

    /**
     * 开始录制
     */
    fun startRecord(view: View) {
        if (isRecording) {
            return
        }
        ct_time.start()
        mediaRecorder = MediaRecorder()
        //设置音频来源,这里是来自麦克风
        mediaRecorder?.setAudioSource(MediaRecorder.AudioSource.MIC)
        //设置输出的音频文件格式,这里设置为3gp
        mediaRecorder?.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP)
        //设置文件保存路径
        mediaRecorder?.setOutputFile(filePath)
        //设置音频编码,注意与输出格式的匹配,具体类型查看官网介绍
        mediaRecorder?.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB)
        try {
            //准备
            mediaRecorder?.prepare()
        } catch (e: Exception) {
            Log.e("Test", "mediaRecorder.prepare() failed")
        }
        //开始录制
        mediaRecorder?.start()
        isRecording = true
    }

    /**
     * 停止录制
     */
    fun stopRecord(view: View) {
        ct_time.stop()
        mediaRecorder?.stop()
        //释放资源
        mediaRecorder?.release()
        mediaRecorder = null
        isRecording = false
    }

    /**
     * 播放音频
     */
    fun startPlay(view: View) {
        if (mediaPlayer != null && mediaPlayer!!.isPlaying) {
            return
        }
        mediaPlayer = MediaPlayer()
        //设置音频数据来源
        mediaPlayer?.setDataSource(filePath)
        try {
            //缓冲
            mediaPlayer?.prepare()
        } catch (e: Exception) {
            Log.e("Test", "mediaPlayer.prepare() failed")
        }
        //播放
        mediaPlayer?.start()

        mediaPlayer?.setOnCompletionListener {
            //播放完毕监听
        }
        mediaPlayer?.setOnErrorListener { mp, what, extra ->
            //播放出错监听
            false
        }
    }

    /**
     * 停止播放
     */
    fun stopPlay(view: View) {
        mediaPlayer?.stop()
        mediaPlayer?.release()
        mediaPlayer = null
    }
    
    override fun onStop() {
        super.onStop()
        mediaPlayer?.release()
        mediaPlayer = null
        mediaRecorder?.release()
        mediaRecorder = null
    }
}

录制音频需要申请权限:android.permission.RECORD_AUDIO

MediaRecorder API 教程 MediaRecorder 是 HTML5 提供的 JavaScript API,用于直接在浏览器中录制音频和视频流。它基于接口,能够将捕获的媒体数据(如摄像头、麦克风或屏幕共享)编码为指定格式并保存。 阅读详情

相关推荐

MediaRecorder简介

1.Android系统实现录音功能 MediaRecorder初始化 private MediaRecorder mMediaRecorder; mMediaRecorder = new MediaRecorder(); MediaRecorder主要方法 void prepar():准备录制 void start():开始录制 void stop():停止录制 void reset():重置 void release():释放资源 void setAudioEncoder(int):设置音频记录的

weixin_43205520的博客 2686

MediaRecorder 介绍和使用,结合Camera2录制视频实例(含完整项目)

在中通过设定的宽高去修改view的宽高。@Override} else {} else {可以将相机的一些基础操作和实现都封装起来,并在CameraSurfaceView中完成相关操作。完整文件地址:// 封装相机的各种操作// 设置屏幕常亮@Override@Override// 将View的大小修改为和相机预览分辨率相同的比例@Override。

阿飞的博客 8096

Android音视频开发之播放、录制音频解析

不少人在音视频初级入门过程中只是接触Android多媒体展示相关的API,通过单独的列举和使用这些API,只能让你对Android音视频处理有一个基本的轮廓,知识点都是零散的,根本没有有效的途径将所有知识点串联起来。这样对于音视频的了解和控制就仅仅局限于最外层的API了,在深入学习之前,往往这些API就已经把脑袋都弄大了,而且,仅仅停留在使用API的层次,不能让你适应不断变化的需求。并且根据上述这份思维导图融合了这些年的工作经历及对网上的资料查询和整理, 最终将其整合了一份高级音视频开发学习笔记。

m0_59236216的博客 1139

Android音视频之MediaRecorder录制视频

1 MediaRecorder 录制视频步骤 这篇文章介绍了Android录音MediaRecorder使用和SoundPool的使用 主要讲解了音频的录制,今天这篇文章讲解录制视频,其实前面已经讲过了利用MediaCodec录制视频但考虑到简单开发用的比较多的还是MediaRecorder所以继续讲解视频的录制。 如何利用MediaRecorder录制视频? 在Camera的文档中写的很清楚:h...

lidongxiu0714 2万+

【一】Android MediaRecorder整体架构源码浅析

资料:本文基于android 7.1.2 版本源码分析。 功能:MediaRecorder即可以录制音频,也可以录制视频。 一、 MediaRecorder整体框架图 1.1、 MediaRecorder整体层级关系图 – 各个具体类之间的依赖关系图: 概要总结: 如上在运行时,整个MediaRecorder大致上可以分为Client和Server两个部分,分别在两个进程中运行,它们之间使用Binder机制实现IPC通信。 MediaPlayerService是多媒体框架中非常重要的一个服务,从框架图中可以

CloverLHao的博客 3787

Android音视频之MediaRecorder音视频录制

前言:      公司产品有很多地方都需要上传音频视频,今天抽空总结一下音频视频的录制。学习的主角是MediaRecorder类。 MediaRecorder类介绍:       MediaRecorder类是Android sdk提供的一个专门用于音视频录制,一般利用手机麦克风采集音频,摄像头采集图片信息。 MediaRecorder主要函数:  setAudioChannel

u012426327的专栏 921

Android MediaRecorder录制视频详细步骤

MediaRecorder录制视频

weixin_53443677的博客 4403

JS基于页面实现音视频的录制(一)

音频与视频信息的捕捉一直是Web开发中的一个难点。许多年来,我们一直依赖浏览器插件来实现这个需求,随着HTML 5推出,这种情况有所改变。因为,HTML5提供了许多可以访问硬件设备的API,例如:访问GPS设备的Geolocation API、访问accelerometer设备的Orientation API、访问GPU设备的WebGL API、访问音频播放设备的Web Audio API等等。这些API功能非常强大,使用这些API,开发者可以直接通过编写JavaSccript脚本代码来访问

weixin_40194610的博客 4918

aac mediarecorder录制_Android音视频录制之MediaRecorder+camera

前言本篇介绍使用Android 中视频录制,录制工具是:MediaRecorder : 视频编码封装camera : 视频画面原始数据采集TextureView : 提供预览画面MediaRecorder基本api介绍MediaRecorder是android中面向应用层的封装,用于提供便捷的音视频编码封装操作,在使用的过程中要严格按照官方指定的生命周期调用顺序,即下图所示的使用步骤image....

weixin_36081299的博客 2731

掌握Android MediaRecorder:音频和视频录制技术指南

本文还有配套的精品资源,点击获取 简介:MediaRecorder是Android中用于录制音频和视频的强大工具,提供了一系列API以简化多媒体数据捕获过程。本篇指南将详细介绍MediaRecorder的使用方法,包括初始化、配置输入输出源、选择编解码器、指定输出文件路径以及启动和停止录制的步骤。此外,还包括音频和视频录制的示例代码和重要事项提醒,帮助开发者在Android...

weixin_42430341的博客 2736

Android音频录制实战:使用MediaRecorder

在移动开发的世界里,音频录制功能是许多应用的核心需求之一。Android平台提供了MediaRecorder类,它是一个方便的API,允许开发者在应用中轻松实现音频录制。MediaRecorder类封装了复杂的音频捕获和编码过程,使得音频录制操作对开发者来说相对简单。MediaRecorder通过一系列简单的方法调用来设置音频源、格式、输出文件路径等,使得开发者可以快速上手并集成到自己的应用中。MediaRecorder类是Android平台用于录制音频和视频的强大工具。

weixin_36204513的博客 1540

MediaRecorder音视频录制

MediaRecorder类介绍: MediaRecorder类是Android sdk提供的一个专门用于音视频录制,一般利用手机麦克风采集音频,摄像头采集图片信息。 MediaRecorder主要函数: setAudioChannels(int numChannels) 设置录制的音频通道数 setAudioEncoder(int audio_encoder) 设置audio的编码格式 setA...

xdy1120的博客 1823

Android MediaRecorder后台视频录制全攻略

后台视频录制功能的实现对于Android开发者而言,既是机遇也是挑战。开发者需要在遵守系统权限规则的同时,解决不同系统版本间的兼容性问题,优化应用性能,以确保用户在各种环境下都能获得稳定流畅的录制体验。通过不断调整和优化,开发者可以为用户创造出既实用又符合平台规范的优秀应用。RecorderDemo是一个旨在演示如何在Android平台上实现音频和视频的后台录制的示例项目。项目的主要目标是克服Android系统对于后台服务的各种限制,实现一个稳定且用户友好的录音和录像应用。

weixin_42263617的博客 1732

Android音频系列(03)-音频播放录制应用开发

摘要:本文介绍了Android系统中音频播放和录制的实现方式。播放部分分为纯音频播放(使用AudioTrack处理PCM原始数据)和多媒体播放(使用MediaPlayer处理压缩格式);录制部分包括音频录制(使用AudioRecord获取PCM数据)和多媒体录制(使用MediaRecorder生成压缩文件)。文章通过代码示例展示了各API的基本使用方法,并指出MediaPlayer底层会调用AudioTrack进行音频输出。两种方案分别适用于低延迟场景和便捷的多媒体文件处理需求。

Minilinux2018的博客 1780

Android中使用MediaRecorder进行录像详解

Android中使用MediaRecorder进行录像详解(视频录制)_IT168文库.pdf 文档的类型是pdf的。不能复制。

【本体】Protege高效批量导入实例(Individuals)的自动化实践

本文详细介绍了在Protege中高效批量导入实例(Individuals)的自动化实践方法。通过分析Protege本体文件结构,提供Python脚本示例,帮助用户快速处理大规模数据导入,显著提升知识图谱构建效率。特别适合需要处理数千个实例的医疗、制药等领域应用。

weixin_30275415的博客 408

Android音视频开发:MediaRecorder录制音频

MediaRecorder录制音频

m0_60259116的博客 1052

FairyGUI深度解析:Unity复杂UI开发的高效解决方案与性能优化

在Unity游戏和应用开发中,UI系统的性能与开发效率是核心挑战。原生UGUI的组件化模型在应对复杂、动态界面时,常面临Draw Call过高、层级管理臃肿的问题。其原理在于,每个UI元素对应一个GameObject,渲染合批受限于Transform层级与材质状态,易导致性能瓶颈。FairyGUI(FGUI)作为一种专业的第三方UI解决方案,其技术价值在于采用了截然不同的“舞台-显示对象”渲染模型。该模型通过内部轻量级对象管理与自主合批系统,实现了极高的运行时效率与Draw Call优化。在应用场景上,FG

weixin_31315567的博客 342
上一篇: 安卓7.0报错android.os.FileUriExposedException
下一篇: Android音视频开发(五)AudioRecord录制音频
程序猫King
博客等级 码龄14年 5580粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猫King

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值