视屏录制 播放分二种方式

Demo实例:https://download.csdn.net/download/weixin_41956752/10692732

:

通过Intent的方式:Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);

二:

使用Camera的API,调用Media的MediaRecorder。

首先第一种:

Intent的方式

注意:这里播放camera录制的视频使用VideoView,不使用MediaPlayer和SurfaceView的结合。用帧布局Framelayout布局,VideoView和ImageView,播放时隐藏视频缩略图,暂停时或初始化时显示视频缩略图。

因为VideoView没有设置监听播放和暂停状态的事件,所以我自定义一个CustomVideoView继承了VideoView,在里面创建一个监听方法和重写VideoView的播放、暂停的方法。

使用相机intent获取视频是使用最少代码使得你的应用获取视频的捷径.一个视频获取intent可以包含以下额外信息:

MediaStore.EXTRA_OUTPUT-此设置需要一个保存视频的路径和文件名的Uri.此设置是可选的但是强列推荐的.如果你不指定此值,相机应用就把请求到的图像以默认的文件名保存到默认的文件夹下,这些信息保存在返回的intent的Intent.getData()字段中.

MediaStore.EXTRA_VIDEO_QUALITY- 此值在最低质量最小文件尺寸时是0,在最高质量最大文件尺寸时是1.

MediaStore.EXTRA_DURATION_LIMIT- 此值设置获取视频的长度,以秒为单位.

MediaStore.EXTRA_SIZE_LIMIT- 此值设置获取视频文件的大小,以字节为单位.

第二种:

方式二-MediaRecorder(中文:媒体记录器)

注解:

SurfaceView中文:曲面视图

Surfaceview是什么?

它拥有独立的绘图表面,即它不与其宿主窗口共享同一个绘图表面。由于拥有独立的绘图表面,因此SurfaceView的UI就可以在一个独立的线程中进行绘制。又由于不会占用主线程资源,SurfaceView一方面可以实现复杂而高效的UI,另一方面又不会导致用户输入得不到及时响应。

SurfaceHolder  用于控制SurfaceView   (getHolder() // 获得SurfaceHolder对象)

SurfaceHolder.Callback具有如下的接口:
surfaceCreated(SurfaceHolder holder):

当Surface第一次创建后会立即调用该函数。程序可以在该函数中做些和绘制界面相关的初始化工作,一般情况下都是在另外的线程来绘制界面,所以不要在这个函数中绘制Surface。

surfaceChanged(SurfaceHolder holder, int format, int width,int height):

当Surface的状态(大小和格式)发生变化的时候会调用该函数,在surfaceCreated调用后该函数至少会被调用一次。

surfaceDestroyed(SurfaceHolder holder):

当Surface被摧毁前会调用该函数,该函数被调用后就不能继续使用Surface了,一般在该函数中来清理使用的资源。

SurfaceView和View的比较

1,SurfaceView和View最大的区别在于,surfaceView是在一个新起的单独线程中可以重新绘制画面而View必须在UI的主线程中更新画面。

SurfaceView和View的使用场景

1 ,被动更新画面的。比如棋类,这种用view就好了。因为画面的更新是依赖于 onTouch 来更新,可以直接使用 invalidate。 因为这种情况下,这一次Touch和下一次的Touch需要的时间比较长些,不会产生影响。

2 ,主动更新。比如一个人在一直跑动。这就需要一个单独的thread不停的重绘人的状态,避免阻塞main UI thread。所以显然view不合适,需要surfaceView来控制。

权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />

例子中先用mediarecorder录制保存一个视频然后播放看看效果,点击“跳转”可以调到第二个Main2Activity中,用VideoView播放刚才录制的视频,Main2Activity主要测试如何播放在本地手机的视频。

查看网址:https://blog.csdn.net/u013742672/article/details/72457490

为什么要进行视屏压缩?

视屏压缩(去除掉原始数据中的一些冗余,然后再进行传输或者存储,来减少对带宽和存储空间的需求)

假设用户接入网带宽为20M(在中国,有这种接入网带宽的用户很少吧?),如果用户想进行实时的视频通信(比如说你想跟外地朋友进行视频聊天),假设你使用的图像分辨率为4CIF(704*576),帧频为25f/s.如果不进行压缩,大概需要多少呢?

  1. 原始图像为4:2:0的YUV格式数据(这个格式已经为原始数据的最小)

每幅画面的大小为:704*576*1.5*8 bit = 4.64M,也就是说每一帧为4.64M。如果想看流畅的视频画面,大概每秒需要传输25帧,也即需要4.64*25M = 116M的带宽

  1. CIF(352*288)格式也需要116/4=29M 的带宽

也就是说如果不压缩,20M的接入带宽,连QQ聊天都做不了

  1. 大家现在不流行说高清,全高清吗,也就是说分辨率为720或者1080。这两种分辨率同样按YUV4:2:0的格式计算,原始数据量就更大了,720P(分辨率为1280*720):1280*720*1.5*8 bit = 10.55M。1080P(分辨率为1920*1080) 1920*1080*1.5*8 bit = 23.73M。要知道这只是一副画面的大小,流畅的视频画面需要大概每秒25帧或以上,也就是说高清720p的视频,原始数据大小为每秒10.55*25 = 263.75M,而1080P每秒数据量为23.73M*25 = 593.25M。这里还都只是算的每秒原始视频数据的数据量

me. 存储和带宽相对廉价的今天,要实现视频的大容量存储(如视频监控)和实时传输,没有视频压缩几乎不可能。

视频压缩现状:

视频压缩编码标准种类繁多,其中ITU下主导的H.26x系列和ISO主导的MPEG系列影响最大,应用最为广泛。早期,ITU下的H.26x主要应用于实时领域;ISO的MPEG系列(它包括音频压缩标准)主要应用于广播电视,VCD(MPEG1)DVD(MPEG2)存储。ITU发展到H.264后,开始与ISO的MPEG4融合。被纳入MPEG-4的第十部分

目前主流的压缩标准为H.264/AVC。它在实时传输和存储领域已经得到广泛的应用。H.2642003年正式发布,距今已经9年。我认为H.264标准未来5年还是视频应用主力。其在IPTV,视频监控,视频会议,和光盘存储中将继续占主导地位

视频压缩先进性评价:

网络带宽就是按每秒多少bit流来计算的,而存储容量的最小单位为Byte,也就是字节(8bit)。存储容量单位的1M表示1MB,等于网络带宽8Mb.

每秒大概数据量为593Mb。如果用户带宽为4Mb,想实现1080P 的实时会议或者监控,最少需要将原始视频压缩近593/4 = 150倍。

视频压缩算法发展的动力:

“一切动力来自人类的无穷欲望”

视频业务发展的基础:

视频压缩的核心思想就是利用视频信号的特点,去除视频信号的时间和空间冗余

从H.261到H.264,MPEG1到MPEG4  未来还有H.265等更为先进的算法出现

(1)算法本身的发展  (2)芯片能力  (3)网络带宽。这三者一起推动了当今高清视频业务的普及,也是未来3D业务发展的技术基础。

视频会议压缩算法之-H.264 High profile

AVC/H.264 规定了多种不同的Profile:最低Profile、主要Profile、扩展Profile、高端Profile(这些Profile 本身还要划分数个等级)。

-最低Profile,也叫做底线Profile(Baseline Profile)支持I/P 帧,只支持无交错(Progressive)和CAVLC;

-扩展Profile(Extended Profile)支持I/P/B/SP/SI 帧,只支持无交错(Progressive)和CAVLC;

-主要Profile(Main Profile)提供I/P/B 帧,支持无交错(Progressive)和交错(Interlaced),同样提供对于CAVLC和CABAC 的支持;

-高端Profile(High Profile)在主要Profile 的基础上增加了8x8 内部预测、自定义量化、无损视频编码和更多的YUV 格式;

H.264中还有一个SVC概念(Scalable Video Coding),可分层编码

1.带宽问题,IP网络带宽是不稳定的,网络带宽降低是,视频流应该自动的降低码率,以适应当前带宽。而视频流码率的降低,并不意味着视频通信的结束,只是其帧率和分辨率相应降低。这样还是能维持基本的视频通信如帧率可以从60fps降低30fps或者25fps甚至20pfs。分辨率可以从高清降到标清的4cif甚至cif。这样可以很大程度的降到码率,但同时保证了视频通信的基本功能正常进行(用户还是能看到能够分辨的图形和听到清晰的声音)。

2.在未来的通信中,参与视频对话的终端多种多样,有专用的硬件视频终端,有桌面软终端,还有移动终端中的PAD和手机。终端的多样性对视频码流的要求也不一样。如移动终端一般相对带宽较小,且屏幕尺寸也较小,屏幕宽高比也不同。每种终端希望拿到最适合自己的视频码流,既适合自己的网络带宽,又适合自己的硬件能力。如一种设备编码流出来后,其中既包含了高清到标清不同分辨率,又具有各种帧率。终端只需要发起申请,从其中拿到适合自己的码流,这是一件多好的事情,(好处)避免的转码,同时合理的利用的带宽和终端的硬件能力。

SVC的本意就是如此,能够实现码流的可伸缩,也就是说能根据带宽,终端的要求,自动调整发送给终端视频流的格式。一次性编码适应于多种信道和终端。视频会议中有一种MCU设备,你要是研究MCU的功能,你会发现它多么适合采用SVC技术。SVC技术的应用理论上应该能节省MCU的部分计算资源。但一路SVC码流实际上市多组码流构成的,它们是相互独立的,如果全部传输和存储必然是带宽和容量的增加。因此这种技术适合使用在中央设备上(如MCU),终端上是不会使用到的。SVC希望做到一次编码后,按需分配。

目前SVC技术应用得不广泛,RADVISION宣称已经支持。目前MCU所做的是要么按最低能力编码发送,要么按数组能力编码,数组码流发送。SVC技术无法做到跨越视频压缩标准,也就是所需要都在H,264或者其它莫一个相同的视频压缩标准之内,所以收端都支持该标准。如果跨域压缩标准(如终端中支持的压缩标准不相同,如只支持MPEG 或者只支持H.263或者只支持H.264),则终端设备还必须做转码才能实现互通。

Android视频录制相关推荐

  1. Android视频录制从不入门到入门系列教程(一)————简介

    一.WHY Android SDK提供了MediaRecorder帮助开发者进行视频的录制,不过这个类很鸡肋,实际项目中应该很少用到它,最大的原因我觉得莫过于其输出的视频分辨率太有限了,满足不了项目的 ...

  2. 利用FFmpeg玩转Android视频录制与压缩(二)

    请尊重原创,转载请注明出处:http://blog.csdn.net/mabeijianxi/article/details/72983362 预热 时光荏苒,光阴如梭,离上一次吹牛逼已经过去了两三个 ...

  3. 利用FFmpeg玩转Android视频录制与压缩(三)

    请尊重原创,转载请注明出处http://blog.csdn.net/mabeijianxi/article/details/73011313 前言 上一回说到啊,这千秋月没是佳人离别,时逢枯枝落旧城, ...

  4. Android视频录制--屏幕录制

    上一篇介绍了MediaProjection,这个类可以用来实现安卓屏幕数据的采集,也就是手机一帧帧的截图,并输出成byte流的格式. 有兴趣的同学可以看这篇: Android视频录制--MediaPr ...

  5. Android视频录制并转GIF格式

    一.概述 我们在学习Android时候,往往需要查阅很多的资料教程,这时候经常会发现大神写的博客往往都是图文并茂的,充满可能性,效果直观的,所以自己个人记录一些日常工作中遇到的问题以及见解,也希望能够 ...

  6. 用FFmpeg玩转Android视频录制与压缩

    [置顶] 利用FFmpeg玩转Android视频录制与压缩(二) 标签: Android视频采集Android视频编码Android FFmpegAndroid 视频压缩视频编码 2017-06-10 ...

  7. android视频录制(调用系统视频录制)

    2019独角兽企业重金招聘Python工程师标准>>> 最近客户有一个视频录制的需求,于是,我就整理下可行的方案. 启动系统视频录制的代码: Intent mIntent = new ...

  8. android 视频录制和上传,关于android实时视频录制与上传 .

    关于android的实时视频录制现在网上炒的很火,我想把自己学习研究的一个视频录制的demo 的心得与大家分享一下 使用的是MediaRecorder 以及使用SurfaceView进行录制的. 视频 ...

  9. android 视频录制小例子,android 录制视频实例 VideoRecordDemo

    [实例简介] [实例截图] [核心代码] package com.example.videorecorddemo; import java.io.IOException; import java.ut ...

  10. android 视频录制 保存到本地

    2021.1.19 更新: github下载地址. 有用的话麻烦点个星星 谢谢 下面贴一下 主要的代码 详细 请去下载我上传的dmeo /******************************* ...

最新文章

  1. 【青少年编程】黄羽恒:翻译小工具 -- 利用百度翻译
  2. 《数学之美》第18章 闪光的不一定是金子--谈谈搜索引擎反作弊问题和搜索结果的权威性问题
  3. C++编程进阶2(编译器在类内默认生成的函数讨论以及纯虚析构函数)
  4. [SSH] Eclipse+Struts+Hibernate的简单应用
  5. 【JavaEE】WebService到底是什么?
  6. Data Remove 程序总结
  7. 嵌入式_makefile简单语法介绍
  8. ‘a’、“a”、‘abc’和“abc”的区别
  9. docker build Dockfile ---- RUN 中 cd 切换路径失败 的原因、解决
  10. yii2 ajax访问控制器,如何在yii2中运行控制器动作作为ajax
  11. 上传图片至服务器,写入到数据库Blob字段中,以及从数据库读取Blob信息(iframe父子页面传值)(2)
  12. css 引入的 方式有哪些? link与post有什么区别??
  13. 20200716:最多 K 次交换相邻数位后得到的最小整数(leetcode 1505)
  14. VMware虚拟机端口映射(NAT设置)
  15. error LNK2005
  16. Django 表单 AuthenticationFrom自动检测user的name 和 password , has no attributes cleaned_data
  17. jpg怎么转换成pdf文档
  18. MySQL添加索引及添加字段并建立索引
  19. LUA源码分析二:了解lua的文件结构和思考方式
  20. JWT实现单点登录(sso)功能

热门文章

  1. 安卓文件管理神器--X-plore
  2. 混凝土塔吊浇筑怎么计算机械费,秒懂塔吊和施工电梯费用的摊销成本测算~
  3. 计算机语言点餐笑话,笑话:逗逼的程序员去点餐,结果·····
  4. CSS3+JavaScript效果:胶卷式放映
  5. 制作分页工具类,实现分页操作JSP+Servlet+数据库
  6. 斯蒂文斯理工学院计算机科学硕士,2020年斯蒂文斯理工学院排名TFE Times美国最佳计算机科学硕士专业排名第80...
  7. 代码设置textField和textView的border和borderColor
  8. linux查看ftp客户端限速配置,vsftpd限速设置
  9. [MAE]Masked Autoencoders掩膜自编码器
  10. 挑战年薪50万不是梦,你要的高级架构师课程来袭!