首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Android中录制,保存和播放视频

在 Android 中录制、保存和播放视频

在 Android 应用中录制、保存和播放视频变得越来越常见。为了实现这些功能,我们可以使用以下技术:

1. 录制视频

使用 Android Camera2 API 可以实现录制视频的功能。为了控制录制过程,可以使用 MediaRecorder。以下代码示例展示了如何使用 Camera2 API 录制视频:

代码语言:java
复制

import android.content.Context;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Matrix;

import android.media.projection.MediaProjection;

import android.media.projection.MediaProjectionManager;

import android.net.Uri;

import android.os.Build;

import android.os.Bundle;

import android.os.Environment;

import android.util.DisplayMetrics;

import android.view.Display;

import android.view.WindowManager;

import android.widget.FrameLayout;

import android.widget.Toast;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Locale;

public class VideoRecorderActivity extends AppCompatActivity {

代码语言:txt
复制
private static final String TAG = "VideoRecorderActivity";
代码语言:txt
复制
private static final int REQUEST_CODE = 1;
代码语言:txt
复制
private static final String DEFAULT_VIDEO_PATH = "video.mp4";
代码语言:txt
复制
private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss", Locale.US);
代码语言:txt
复制
private MediaProjectionManager mediaProjectionManager;
代码语言:txt
复制
private MediaProjection mediaProjection;
代码语言:txt
复制
private DisplayMetrics displayMetrics;
代码语言:txt
复制
private int screenWidth;
代码语言:txt
复制
private int screenHeight;
代码语言:txt
复制
private FrameLayout videoView;
代码语言:txt
复制
private SurfaceView surfaceView;
代码语言:txt
复制
private CameraDevice cameraDevice;
代码语言:txt
复制
private CameraCaptureSession captureSession;
代码语言:txt
复制
private CaptureRequest.Builder captureRequestBuilder;
代码语言:txt
复制
private Surface surface;
代码语言:txt
复制
private boolean isPreviewRunning;
代码语言:txt
复制
@Override
代码语言:txt
复制
protected void onCreate(Bundle savedInstanceState) {
代码语言:txt
复制
    super.onCreate(savedInstanceState);
代码语言:txt
复制
    setContentView(R.layout.activity_video_recorder);
代码语言:txt
复制
    mediaProjectionManager = (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);
代码语言:txt
复制
    displayMetrics = getResources().getDisplayMetrics();
代码语言:txt
复制
    screenWidth = displayMetrics.widthPixels;
代码语言:txt
复制
    screenHeight = displayMetrics.heightPixels;
代码语言:txt
复制
    videoView = findViewById(R.id.video_view);
代码语言:txt
复制
    surfaceView = findViewById(R.id.surface_view);
代码语言:txt
复制
    findViewById(R.id.record_button).setOnClickListener(new View.OnClickListener() {
代码语言:txt
复制
        @Override
代码语言:txt
复制
        public void onClick(View v) {
代码语言:txt
复制
            startRecording();
代码语言:txt
复制
        }
代码语言:txt
复制
    });
代码语言:txt
复制
    findViewById(R.id.stop_button).setOnClickListener(new View.OnClickListener() {
代码语言:txt
复制
        @Override
代码语言:txt
复制
        public void onClick(View v) {
代码语言:txt
复制
            stopRecording();
代码语言:txt
复制
        }
代码语言:txt
复制
    });
代码语言:txt
复制
}
代码语言:txt
复制
private void startRecording() {
代码语言:txt
复制
    stopRecording(); // 先停止录制
代码语言:txt
复制
    Intent intent = mediaProjectionManager.createScreenCaptureIntent();
代码语言:txt
复制
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
代码语言:txt
复制
    startActivityForResult(intent, REQUEST_CODE);
代码语言:txt
复制
}
代码语言:txt
复制
private void stopRecording() {
代码语言:txt
复制
    if (captureSession != null) {
代码语言:txt
复制
        captureSession.close();
代码语言:txt
复制
        captureSession = null;
代码语言:txt
复制
    }
代码语言:txt
复制
    if (cameraDevice != null) {
代码语言:txt
复制
        cameraDevice.close();
代码语言:txt
复制
        cameraDevice = null;
代码语言:txt
复制
    }
代码语言:txt
复制
}
代码语言:txt
复制
@Override
代码语言:txt
复制
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
代码语言:txt
复制
    if (requestCode == REQUEST_CODE) {
代码语言:txt
复制
        if (resultCode == RESULT_OK) {
代码语言:txt
复制
            Bundle extras = data.getExtras();
代码语言:txt
复制
            Bitmap bitmap = extras.getParcelable("data");
代码语言:txt
复制
            videoView.setVideoPath(getFilename());
代码语言:txt
复制
            videoView.setMediaController(new MediaController(this));
代码语言:txt
复制
            videoView.requestFocus();
代码语言:txt
复制
            videoView.start();
代码语言:txt
复制
        } else {
代码语言:txt
复制
            Toast.makeText(this, "Screen capture failed, please try again", Toast.LENGTH_SHORT).show();
代码语言:txt
复制
        }
代码语言:txt
复制
    }
代码语言:txt
复制
}
代码语言:txt
复制
private String getFilename() {
代码语言:txt
复制
    File videoFolder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES), "Camera");
代码语言:txt
复制
    if (!videoFolder.exists()) {
代码语言:txt
复制
        videoFolder.mkdirs();
代码语言:txt
复制
    }
代码语言:txt
复制
    return videoFolder.getAbsolutePath() + "/" +
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android实现拍照录制视频功能

本文实例为大家分享了Android实现拍照录制视频功能的具体代码,供大家参考,具体内容如下 文档的Camera 要使用Camera,首先我们先看一下文档是怎么介绍的。...首先,需要在AndroidManifest.xml声明以下权限特性: <uses-permission android:name="android.permission.CAMERA" / <...你的应用应该在onPause()被调用时就进行释放,onResume()时再重新open()。 上面就是文档关于使用Camera进行拍照的介绍了。接下来说一下我的使用场景。...(FileNotFoundException e) { e.printStackTrace(); } } }); } } 录制视频..." / <uses-permission android:name="android.permission.RECORD_AUDIO" </uses-permission 简单的拍照还录制视频的功能就实现了

3.1K30
  • Android仿微信语音消息的录制播放功能

    当手指抬起时,判断是否开始录音,录音时长是否过短,符合条件则提示录音时长过短;正常结束时通过回调返回该次录音的文件路径时长。 4.点击录音列表的item时,播放动画,播放对应的音频文件。...,time);//(当前录音文件路径,时长) } } } 二、MediaManager封装 简述:使用MediaPlayer播放录制好的音频文件,要注意MediaPlayer资源的释放。...代码: import android.media.*; import java.io.IOException; /** * 播放管理类 */ public class MediaManager {...50;//定义上滑取消距离 private int mCurState = STATE_NORMAL;//记录当前状态 private boolean isRecording = false;//是否录音状态...仿微信语音消息的录制播放功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。

    4.1K41

    Android如何使用OpenGL播放视频

    视频在网络上进行传播的时候,通常会采用各种流媒体协议,如HTTP,RTMP等,这些协议传输音视频数据的同时会增加一些信令信息(播放状态,网络状态描述等)。...解码是整个流程中最核心最复杂的一步,通过解码,压缩编码的音频数据解压为非压缩的音频抽样数据,如PCM;压缩编码的视频数据解压为非压缩的颜色数据,如YUV,RGB等 音视频同步:通过解封装步骤获取的相关参数...,同步解码出来的视频音频数据,并发送到系统的显卡和声卡中进行播放 MediaPlayer生命周期 Android系统播放视频可以使用MediaPlayer来完成上面的播放流程,常用的VideoView...GLSurfaceView的大小,通常都会有视频播放拉伸的问题,因为视频的宽高比容器的宽高比不一致,我们可以通过设置模型矩阵来调整GL顶点 override fun onVideoSizeChanged...点击播放按钮的时候才开始更新GLSurfaceView,为了避免启动后界面一片黑,我们GLSurfaceView上盖一层ImageView来展示一帧图像,开始播放后就隐藏这个ImageView,获取视频缩略图

    2.2K20

    Android使用MediaRecorder类实现视频音频录制功能

    一、前期基础知识储备 Android提供了MediaRecorder这一个类来实现视频音频的录制。...由官方配图可知,MediaRecorder用于录制视频时需要调用一系列的API来设置录制相关的配置,而且调用方法的顺序是固定的,必须按照这个顺序进行API调用才能正确利用手机摄像头实现录像功能。...二、上代码,具体实现录制视频视频播放功能 这里调用MediaRecorder的API实现视频录制功能并借用MediaPlayer多媒体播放类实现录制好的视频播放。...录制好的视频存储在手机外部存储 以录像时间+mp4格式命名 * */ private String getOutputMediaFile() { Log.d(TAG, "获取视频存储的位置...= null){ mMediaPlayer.release(); mMediaPlayer = null; } } } 三、延伸知识,运行时权限申请工具类 调用手机系统内置的摄像头进行视频录制时及录制视频后将视频保存在本地都需要申请系统权限

    3.2K21

    【FFmpeg】音视频录制 ① ( 查询系统 ffmpeg 可录制的音视频输入设备 | 使用 ffmpeg 命令录制视频数据 | 录制视频数据命令 |录制音频数据| 同时录制音频视频数据命令 )

    一、查询系统 ffmpeg 可录制的音视频输入设备 Windows 系统 , 使用 ffmpeg 命令 录制视频 , 需要先获取 系统的 音视频设备 信息 , 录制视频 本质上是从 系统音视频设备...-c:v libx264 -preset ultrafast output.mp4 命令 , 可以 Windows , 捕获视频数据 , 上述命令参数解析 : -f gdigrab : 设置 录制视频...系统声音 ; -c:a aac : 设置 音频编解码器 为 AAC 格式 ; 按下 Ctrl + C 组合键后 , 就会终止音频录制 ; 3、同时录制音频视频数据命令 执行 ffmpeg -f gdigrab...视频 音频 到 输出文件 , 录制视频的命令 与 上面的命令参数相同 , 只是在上述录制视频的基础上 , 增加了 -f dshow -i audio="立体声混音 (Realtek(R) Audio...Ctrl + C 键 停止录制 , 录制后的视频可以正常播放 ;

    27710

    【秒杀】网课视频播放速度太慢,js提升网页视频播放速率,浏览器修改视频播放速度

    document.querySelector("video").playbackRate = 4; 番外 自定义视频速度 修改这个值即可 番外的番外(这块可以不看) 除了使用开发者工具调整播放速度外...此外,还有一些第三方软件可以实现更高级的视频速度控制功能,比如PotPlayer、VLC媒体播放器等。...这些软件不仅支持更高的播放速度设置,还可以调整音频与视频的同步、增加字幕等功能,为您提供更好的观看体验。...结语 结束,拜拜喽ヾ(•ω•`)o 通过本文介绍的方法,您可以轻松地自定义网课视频播放速度,提高学习效率。...合理利用快速播放功能的同时,也要注意保持良好的学习习惯,如做好笔记、及时复习等,才能更好地提升学习成效。祝您在网课学习取得好成绩! 【结尾凑点字数,不然感觉字数有些太少了,(●'◡'●)】

    57310

    Cordova插件cordova-plugin-media-capture实现短视频录制上传播放

    2、本文主要讲Android的实现,IOS端目前还在适配,不少问题到时候再另外单独发一篇 实现逻辑 1、客户端利用cordova-plugin-media-capture插件调用摄像机权限进行视频拍摄...2、拍摄的视频上传至服务器 3、服务端接收视频文件并转码保存删除源文件,将保存链接返回给客户端 4、客户端接收链接利用vedio插件进行显示播放 实现步骤 安装cordova-plugin-media-capture...要么就是他们app其他地方已经获取过存储权限了!比如调用图库的这个插件就会弹窗提示给权限!然后这个插件并不会,这是第一个坑!...quality必须只能选择高画质了 2、this.onSuccess成功回调方法我们就可以获取到视频客户端的保存路径了 onFail(message) { //取消照相功能提示 }...这里默认的播放器样式很丑的,我们需要自定义样式实现点击视频屏幕播放暂停功能 贴出来自定义的css /*播放按钮设置成宽高一致,圆形,居中*/ .vjs-custom-skin > .video-js

    1.7K00

    示例:H5使用video结合canvas来录制视频上传

    1.背景 对于正在播放视频,期望做到 录制这个视频流,并上传到后端服务。 2.实现思路: 1.通过 video 播放视频,不过video设置为不可见。...2.将 video里的视频帧展示 canvas 上。 3.录制 canvas 上的绘制的内容 并生成 字节blob 包。...1、初始视频操作 2、播放 其实就是获得 cavas 的绘制 context , 利用 requestAnimationFrame 的帧回调,不断的刷新和绘制 视频的内容到 canas...通过 _theCanvas.captureStream(60); 获得一个 视频流 将视频流作为参数,生成一个 MediaStreamRecorder 录制器。...调用 录制器 的 start() 方法开始录制。 _mediaRecorder.ondataavailable 的回调方法 追加保持字节。

    2.5K20

    微信小程序接口全解析!从官方 Demo 了解小程序的能力

    媒体组件 image(加载本地网络图片); audio(播放音频); video(播放视频)。 视频可以添加弹幕,用户也可以直接选择全屏播放。嗯,程序员哥哥又可以少写好多代码。...录音接口,可以录制不超过一分钟的音频。录制过程,小程序顶部导航栏会出现提示。 使用音乐接口播放的音乐,可以在后台进行播放。...文件接口中,Demo 只是展示了图片的选取保存,不知道是否支持其他文件格式。这里的文件是永久保存,下次打开小程序时候还可以使用。 视频接口,可以即时录制或选择已录制视频。...但选择录制视频时,也是通过系统的相机应用进行拍摄。 小程序首次调用图片、录音、读写数据、文件等功能时,会出现权限确认框。...数据 Android 里 SharedPreferences 一样,小程序支持直接保存键值对,也是永久保存,在下次打开后可以进行读取。

    1.8K30

    Android 音频开发入门指南

    AudioTrack:用于播放 PCM 音频数据的低级 API。 AudioRecord:用于录制音频数据的低级 API。 二、音频播放 Android 应用播放音频是一项常见需求。...2.1 使用 MediaPlayer 播放音频 MediaPlayer 是 Android 提供的用于播放音频视频文件的高级 API。...七、处理音频权限 进行音频录制播放时,我们需要在应用的Manifest文件添加相应的权限。对于音频录制,我们需要添加RECORD_AUDIO权限。...注意保存恢复应用状态:当应用被系统暂停或销毁时,我们需要保存当前的音频播放录制状态,并在应用恢复时恢复这些状态。 九、实际案例分析 实际开发,音频应用的需求和场景多种多样。...十、总结 在这篇文章,我们已经学习了 Android 音频开发的基本概念技巧,包括音频播放录制、处理等方面的内容。

    8910

    Android视频视频采集(系统API预览)

    首先第一个反应打开Google搜索Android视频采集相关的东西,我们要知道如何通过API来采集,不由自主地到了Android官网的Camera API。...这篇文章我们掌握调用系统的拍照录制视频API来实现拍照录像功能。 Camera 它是API21(Android5.0)以前用来对摄像头数据采集的的API,我们从开始到每个环节的关键内容记录如下。...<uses-permission android:name="android.permission.RECORD_AUDIO" / 存储权限:如果我们要保存相片视频存储设备那么就要加上这个权限。...="android.hardware.location.gps" / 调用系统的摄像头app来拍照录制视频 拍照 请求摄像头特征 <manifest ......,如果要对视频播放器进行定制,那么久要多一些东西,我们现在只简单的可以播放调用系统录制视频

    1.4K10

    Android开发笔记(五十七)录像录音与播放

    媒体录制MediaRecorder MediaRecorder是Android自带的录制工具,通过操纵摄像头麦克风完成媒体录制,既可录制视频,也可单独录制音频。...可监听录制结束事件,包括达到录制时长或者达到录制大小。 以上方法用于关联录像工具事件。 setAudioSource : 设置音频来源。一般使用麦克风AudioSource.MIC。...该方法为可选 setVideoFrameRate : 设置视频每秒录制的帧数。越大则视频越连贯,当然大小也越大。该方法为可选 以上六个方法用于录制视频,如果仅是录音则不需要这五个方法。...媒体播放MediaPlayer MediaPlayer是Android自带的播放器,可用于播放视频与音频。...if (mMediaPlayer.isPlaying()) { // 如果正在播放我们就先保存这个播放位置 mPosition = mMediaPlayer.getCurrentPosition

    3.2K52

    android之实现打开相册、拍照录像、播放视频保存图片到系统相册指定位置、图片压缩

    —————保存图片到指定位置——— 将Bitmap保存图片到指定的路径/sdcard/Boohee/下,文件名以当前系统时间命名,但是这种方法保存的图片没有加入到系统图库 public static...——- 调用以上系统自带的方法会把bitmap对象保存到系统图库, 但是这种方法无法指定保存的路径名称, 上述方法的title、description参数只是插入数据库的字段, 真实的图片名称系统会自动分配...插入图库的方法图片并没有立刻显示图库,而我们需要立刻更新系统图库以便让用户可以立刻查看到这张图片。...UI //播放视频 public void play(){ mediaPlayer = new MediaPlayer(); try { mediaPlayer.setDataSource("http...();//开始播放 } //方法三:vitamio框架实现视频播放 public void vitamioMobviePlay(){ } } 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人

    5.3K20

    测试人员进阶,直播类产品的音视频质量测试攻略分享!

    视频基本原理 1.采集 音视频需要经过摄像头、麦克风上等硬件设备上通过其上的传感器采集传输转化,最终成为计算机数字信号的过程。其中双人视频视频的播片,采集播放都是由ffmpeg插件完成。...一台电脑播放视频,一台电脑录制视频,一部手机当主播,一部手机当观众,摄像头采集观众端画面。...5.视频质量稳定性 各种损伤变化场景下,直播3小时内未出现花屏、黑屏、自动中断等现象 测试方法 1.损伤自动化测试,并使用软件会声会影进行录制; 2.查看录制视频是否有花屏、黑屏或异常中断等现象。...测试方法 观看直播过程,主观判断视频画面主播口型跟声音是否对得上 连麦-噪声抑制 主播观众连麦模式下,主播→观众的噪声消除效果跟上个版本相比,噪声抑制效果没有变差。...观众观的扬声器口连接PC的麦克风; 4.使用Adobe Audition 进行录制保存文件; 5.

    2.5K21

    实时音视频开发学习6 - 云端录制与回放

    腾讯云产品会将录制结果保存在云点播的资源管理的视频管理当中,在这里可以通过管理视频查阅视频的基本信息、视频发布或在浏览器中直接使用。...存储位置 如果你选择的时HLS文件格式,且没有设置续播,那么音视频直播停止之后便会自动保存在腾讯云的云点播的媒体资源视频管理选项。...面板只需要填写个人密钥的SecretIdSecretKey以及保存区域Region,然后点击在线生成,这里我选用的是node.js。 得到在线调试结果,包括响应头、响应结果真是请求。...删除录制文件 直接通过云点播的视频管理可以删除录制文件,也可以批量删除所录制的文件。 视频前端播放 视频播放支持IOS平台、Android平台以及Web浏览器。这里以Web浏览器为例。...浏览器不支持视频播放的情况下,实现了视频播放效果的多平台统一体验,并结合腾讯云点播视频服务,提供防盗链播放 HLS 普通加密视频等功能。

    6.6K30

    Agora SDK Android的使用(在线视频通话)

    (最外层) 如果你想导入AS查看,可以看一下com.android.tools.build:gradle的版本修改一下 ---->[settings.gradle]---------------...------------------- private static final int PERMISSION_REQ_ID = 22; //WRITE_EXTERNAL_STORAGE 权限只是为了保存日志到...);//初始化Agora引擎 setupVideoProfile();//设置视频信息 setupLocalVideo();//设置本地的视频窗 joinChannel();//...高考之后(2012年)的暑假,一个好友家里建了一个QQ号,起名"张风杰特烈"(后更名"张风捷特烈") 从此之后我的手机基本打电话,发短信无缘了。可以说是打开了新世界的大门吧。...数据流动中加工,反馈,展现 通过前端、后端、移动端的涉猎,基本明白了是怎么回事。

    1.4K10
    领券