录音视频

录音需要用到MediaRecorder,先用它录制音频,保存到本地文件;之后用MediaPlayer 传递路径进行播放

首先在onCreate中生成保存音频的文件夹 (也要判断有没有sd卡)

        String dir=Environment.getExternalStorageDirectory()+ "/"+getPackageName()+"/Audio";
        File file=new File(dir);
        if (!file.exists()){
            file.mkdirs();
        }

开始录音

4 音频来源

5 输出格式

6 音频编码

7 输出文件

 1     void record() {
 2         path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" +getPackageName() + "/Audio/" + System.currentTimeMillis() + ".amr";
 3         recorder = new MediaRecorder();
 4         recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
 5         recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
 6         recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
 7         recorder.setOutputFile(path);
 8         try {
 9             recorder.prepare();
10             recorder.start();
11         } catch (IOException e) {
12             e.printStackTrace();
13         }
14     }

停止录音

    void stoprecord(){
        if (recorder!=null){
            recorder.stop();
            recorder.reset();
            recorder.release();
            recorder=null;
        }
    }

点击开始录音后,最好把录音按钮设置成不能点击,等结束录音再开启

查看官方文档,发现在api24 也就是 android 7.0 中加入了 暂停和恢复  pause()  resume(),所以以前的版本是没有官方的录制暂停和恢复的,网上有合成文件的方法

播放音频   setDataSource可以是本地路径 也可以是网络链接

    void play(){
        player=new MediaPlayer();
        try {
            player.setDataSource(path);
            player.prepare();
            player.start();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

停止播放

    void stopplay(){
        if (player!=null){
            player.stop();
            player.release();
            player=null;
        }
    }

暂停 用pause()   恢复方法 就是 start()

视频录制  需要画面来显示

这里用 SurfaceView

首先初始化

1 和10 都是 设置录制视频的分辨率  ,可以只设置一边,此时两边都设置了,最后录制出来的还是 320*240的视频

7 8 设置视频来源 音频来源

9 设置输出格式

11 视频的帧率

12 13 设置视频音频编码

14 很重要 让视频显示到view上

 1         surfaceView.getHolder().setFixedSize(176, 144);
 2         surfaceView.getHolder().setKeepScreenOn(true);
 3         surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
 4             @Override
 5             public void surfaceCreated(SurfaceHolder surfaceHolder) {
 6                 recorder = new MediaRecorder();
 7                 recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
 8                 recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
 9                 recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
10                 recorder.setVideoSize(320, 240);
11                 recorder.setVideoFrameRate(5);
12                 recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
13                 recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
14                 recorder.setPreviewDisplay(surfaceHolder.getSurface());
15             }
16
17             @Override
18             public void surfaceChanged(SurfaceHolder surfaceHolder, int format,int width,int height) {
19
20             }
21
22             @Override
23             public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
24                 if (recorder!=null){
25                     recorder.release();
26                 }
27
28             }
29         });

录制视频

    void record(){
        path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" +getPackageName() + "/video/" + System.currentTimeMillis() + ".mp4";
        recorder.setOutputFile(path);
        try {
            recorder.prepare();
            recorder.start();
        } catch (IOException e) {
            e.printStackTrace();
        }catch (IllegalStateException e) {
            e.printStackTrace();
        }
    }

停止录制

    void btn_stoprecord(){
        if (recorder!=null){
            try {
                recorder.setOnErrorListener(null);
                recorder.setPreviewDisplay(null);
                recorder.stop();
                recorder.release();
                recorder=null;
            }catch (IllegalStateException e){
                e.printStackTrace();
            }catch (RuntimeException e){
                e.printStackTrace();
            }
        }
    }

播放

    void play(View view){
        player = new MediaPlayer();
        try {
            player.setDataSource(path);
            player.setDisplay(surfaceView.getHolder());
            player.prepare();
            player.start();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

其他部分和音频差不多

另一种播放视频的方式    VideoView

感觉和webview 差不多

给他setVideoPath 就能指定视频地址

然后设置一个 MediaController 就能控制视频播放了

时间: 2024-10-09 06:39:08

录音视频的相关文章

Android 音视频深入 四 录视频MP4(附源码下载)

本篇项目地址,名字是<录音视频(有的播放器不能放,而且没有时长显示)>,求star https://github.com/979451341/Audio-and-video-learning-materials1.MediaMuser说明 MediaMuser:将封装编码后的视频流和音频流到mp4容器中,说白了能够将音视频整合成一个MP4文件,MediaMuxer最多仅支持一个视频track和一个音频track,所以如果有多个音频track可以先把它们混合成为一个音频track然后再使用Med

2017年6月笔记

react native webview加载本地html资源文件的解决方案 https://blog.jeepeng.com/2017/03/16/react-native-webview-load-from-device-local-file-system/?utm_source=tuicool&utm_medium=referral 消息中间件(一)分布式系统事务一致性解决方案大对比,谁最好使? http://blog.csdn.net/lovesomnus/article/details/

Android Camera fw学习(四)-recording流程分析

Android Camera fw学习(四)-recording流程分析 备注:备注:本文是Android5.1学习笔记.博文按照软件启动流程分析.  且行且惜,一步一个脚印,这次学习camera Video.虽然标题是recording流程分析,但这里很多和preview是相似的(包含更新,创建Stream,创建Request),这里主要分析MediaRecorder对象创建.video帧监听对象注册.帧可用事件以及一系列callback流程分析. 一.认识video(mediaRecorde

“花式”裁员套路深,你知道吗?

今年南方的雨水偏多,冬天显得比往年冷.在贸易战.资本寒冬的背景下,劳资矛盾也变得越来越尖锐,裁员频频发生.如果企业经营不善,遭遇营收困境,资金链断裂,那么裁员是不得已而为之的事情.但有些企业营收很好,利润率也很高,并未遇上太大的困境,就是趁着混乱借裁员来换血,一边招聘应届毕业生,一边裁撤奉献了青春的老员工,把员工看作一茬茬的待割韭菜.危难时刻见真章,有良心的资方会尽量考虑员工的困难,要么想各种方法补救,要么按劳动法补偿,但也有不少冷血无情的,尤其最近网上曝光的网易.华为等恶性裁员事件,看了着实让

iOS开发系列--音频播放、录音、视频播放、拍照、视频录制

iOS开发系列--音频播放.录音.视频播放.拍照.视频录制 转载:http://www.cnblogs.com/kenshincui/p/4186022.html#avFoundationCamera --iOS多媒体 概览 随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操作都提供了多套API.在今天的文章中将会对这些内容进行一一介绍: 音频 音

1.QT中播放视频,录音程序的编写

 1  通过process的方式播放视频 T22VideoPlayer.pro HEADERS += \ MyWidget.h SOURCES += \ MyWidget.cpp QT += gui widgets MyWidget.h #ifndef MYWIDGET_H #define MYWIDGET_H   #include <QWidget> #include <QProcess> #include <QSlider>   class MyWidget :

音频播放、录音、视频播放、拍照、视频录制-b

随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操作都提供了多套API.在今天的文章中将会对这些内容进行一一介绍: 音频 音效 音乐 音频会话 录音 音频队列服务 视频 MPMoviePlayerController MPMoviePlayerViewController AVPlayer 摄像头 UIImagePickerController拍照

iOS开发–音频播放、录音、视频播放、拍照、视频录制

概览 随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操作都提供了多套API.在今天的文章中将会对这些内容进行一一介绍: 音频 在iOS中音频播放从形式上可以分为音效播放和音乐播放.前者主要指的是一些短音频播放,通常作为点缀音频,对于这类音频不需要进行进度.循环等控制.后者指的是一些较长的音频,通常是主音频,对于这些音频的播放通常需要进行精确的控制

音频播放、录音、视频播放、拍照、视频录制

--iOS多媒体 概览 随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操作都提供了多套API.在今天的文章中将会对这些内容进行一一介绍: 音频 音效 音乐 音频会话 录音 音频队列服务 视频 MPMoviePlayerController MPMoviePlayerViewController AVPlayer 摄像头 UIImagePicker