用MediaRecoder类进行录制视频

android MediaRecorder录制音视频实现直播的基础 工作这么久,一直都很忙,好不容易闲下来就不习惯了。突然觉得应该做点有意义的事情,这几天研究了一下视屏直播方面的知识,使用camara,surfaceview,MediaRecorder录制音视频,surfaceview提供camara的预览。好了废话不多说了首先了解api吧。 一。首先初始化camara private int camaraBack=1;//1后置摄像头  0前置摄像头 pr 阅读详情

与音频的不同点是在视频录制中需要定义一个额外的SurfaceView组件,以捕获摄像头采集的数据。


(1)主程序

publicclass MyMediaRecorderDemo extends Activity {

    private ImageButton record = null;

    private ImageButton stop = null;

    private ImageButton browser = null;

    private TextView info = null;

    private MediaRecorder mediaRecorder = null;

    private boolean sdcardExists = false; // SD卡存在的标记

    private File recordVideoSaveFileDir = null;

    private File recordVideoSaveFile = null;

    private String recordVideoSaveFileName =null;

    private String recDir ="mldnvideo";

    private boolean isRecord = false;

    private SurfaceView surface = null;

 

    @Override

    public void onCreate(BundlesavedInstanceState) {

        super.onCreate(savedInstanceState);

        super.requestWindowFeature(Window.FEATURE_NO_TITLE);// 不显示标题

        super.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

                WindowManager.LayoutParams.FLAG_FULLSCREEN);

        super.getWindow().addFlags(

                WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);// 高亮的风格显示

        super.setContentView(R.layout.main);

        this.record = (ImageButton)super.findViewById(R.id.record);

        this.stop = (ImageButton) super.findViewById(R.id.stop);

        this.browser = (ImageButton)super.findViewById(R.id.browser);

        this.info = (TextView)super.findViewById(R.id.info);

        this.surface = (SurfaceView)super.findViewById(R.id.surface);

        this.surface.getHolder().setType(

                SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

        this.surface.getHolder().setFixedSize(480,800);

        if ((this.sdcardExists =Environment.getExternalStorageState().equals(

                Environment.MEDIA_MOUNTED))) {

            this.recordVideoSaveFileDir = newFile(Environment

                    .getExternalStorageDirectory().toString()

                    + File.separator

                    +MyMediaRecorderDemo.this.recDir + File.separator); // 保存文件夹

            if(!this.recordVideoSaveFileDir.exists()) {

                this.recordVideoSaveFileDir.mkdirs();// 创建文件夹

            }

        }

        this.record.setOnClickListener(newRecordOnClickListenerImpl()) ;

        this.stop.setOnClickListener(newStopOnClickListenerImpl()) ;

        this.browser.setOnClickListener(newBrowserOnClickListenerImpl()) ;

        this.stop.setEnabled(false) ;   // 停止录象的按钮暂时不可用

    }

    private class RecordOnClickListenerImplimplements OnClickListener {

        @Override

        public void onClick(View v) {

            if(MyMediaRecorderDemo.this.sdcardExists){ // sd卡存在

                MyMediaRecorderDemo.this.recordVideoSaveFileName= MyMediaRecorderDemo.this.recordVideoSaveFileDir

                        .toString()

                        + File.separator

                        + "MLDNVideo_"

                        +System.currentTimeMillis() + ".3gp";// 文件的路径名称

                MyMediaRecorderDemo.this.recordVideoSaveFile= new File(

                        MyMediaRecorderDemo.this.recordVideoSaveFileName);//文件路径

                MyMediaRecorderDemo.this.mediaRecorder= new MediaRecorder() ;

                MyMediaRecorderDemo.this.mediaRecorder.reset();// 重置

                MyMediaRecorderDemo.this.mediaRecorder

                        .setAudioSource(MediaRecorder.AudioSource.MIC);

                MyMediaRecorderDemo.this.mediaRecorder

                        .setVideoSource(MediaRecorder.VideoSource.CAMERA);

                MyMediaRecorderDemo.this.mediaRecorder

                        .setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);

                MyMediaRecorderDemo.this.mediaRecorder

                .setVideoEncoder(MediaRecorder.VideoEncoder.H263);//定义视频编码

                MyMediaRecorderDemo.this.mediaRecorder

                .setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//定义音频编码

                MyMediaRecorderDemo.this.mediaRecorder

                        .setOutputFile(MyMediaRecorderDemo.this.recordVideoSaveFileName);//定义输出文件

                MyMediaRecorderDemo.this.mediaRecorder.setVideoSize(320,240) ;

        MyMediaRecorderDemo.this.mediaRecorder.setVideoFrameRate(10);//每秒10帧

                MyMediaRecorderDemo.this.mediaRecorder

                        .setPreviewDisplay(MyMediaRecorderDemo.this.surface

                                .getHolder().getSurface());//定义视频显示

                try {

                    MyMediaRecorderDemo.this.mediaRecorder.prepare();

                } catch (Exception e) {

                    Log.i("MyMediaRecorderDemo",e.toString()) ;

                }

                MyMediaRecorderDemo.this.mediaRecorder.start();

                MyMediaRecorderDemo.this.info.setText("正在录象中...") ;

                MyMediaRecorderDemo.this.stop.setEnabled(true);

                MyMediaRecorderDemo.this.record.setEnabled(false);

                MyMediaRecorderDemo.this.isRecord= true ;

            }

        }

    }

    private class StopOnClickListenerImplimplements OnClickListener {

        @Override

        public void onClick(View v) {

            if(MyMediaRecorderDemo.this.isRecord){

                MyMediaRecorderDemo.this.mediaRecorder.stop();

                MyMediaRecorderDemo.this.mediaRecorder.release();

                MyMediaRecorderDemo.this.stop.setEnabled(false);

                MyMediaRecorderDemo.this.record.setEnabled(true);

                MyMediaRecorderDemo.this.info.setText("录象结束,文件路径为:"

                        +MyMediaRecorderDemo.this.recordVideoSaveFile);

            }

        }

    }

    private class BrowserOnClickListenerImplimplements OnClickListener {

        @Override

        public void onClick(View v) {

            Intent it = newIntent(MyMediaRecorderDemo.this,BroswerActivity.class) ;

            MyMediaRecorderDemo.this.startActivity(it);

        }

    }

    @Override

    public boolean onKeyDown(int keyCode,KeyEvent event) {

        if(keyCode == KeyEvent.KEYCODE_BACK) {//如果是手机上的返回键

            super.finish() ;//程序结束

        }

        return false ;

    }

   

}

(2)定义BrowserActivity程序完成ListView列表显示
public class BroswerActivity extends Activity {

    private ImageButton back = null ;

    private ListView videolist = null ;

    private SimpleAdapter recordSimpleAdapter =null ;

    private List<Map<String,Object>>recordFiles = null ;

    private String recDir ="mldnvideo";

    private File recordVideoSaveFileDir = null;

    private boolean sdcardExists = false;

    @Override

    public void onCreate(Bundle savedInstanceState){

        super.onCreate(savedInstanceState);

        super.requestWindowFeature(Window.FEATURE_NO_TITLE);// 不显示标题

        super.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

                WindowManager.LayoutParams.FLAG_FULLSCREEN);

        super.getWindow().addFlags(

                WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);// 高亮的风格显示

        super.setContentView(R.layout.broswer);

        if ((this.sdcardExists =Environment.getExternalStorageState().equals(

                Environment.MEDIA_MOUNTED))) {

            this.recordVideoSaveFileDir = newFile(Environment

                    .getExternalStorageDirectory().toString()

                    + File.separator

                    +BroswerActivity.this.recDir + File.separator); // 保存文件夹

            if(!this.recordVideoSaveFileDir.exists()) {

                this.recordVideoSaveFileDir.mkdirs();// 创建文件夹

            }

        }

        this.back = (ImageButton)super.findViewById(R.id.back) ;

        this.videolist = (ListView)super.findViewById(R.id.videolist) ;

        this.back.setOnClickListener(newBackOnClickListenerImpl()) ;

        this.getRecordFiles() ;

        this.videolist.setOnItemClickListener(newOnItemClickListenerImpl()) ;

    }

 

    private void getRecordFiles() {

        this.recordFiles = newArrayList<Map<String, Object>>();

        if(this.sdcardExists){

            File files [] =this.recordVideoSaveFileDir.listFiles() ;

            for (int x = 0; x < files.length;x++) {

                Map<String, Object>fileInfo = new HashMap<String, Object>();

                fileInfo.put("filename",files[x].getName()) ;

                this.recordFiles.add(fileInfo) ;

            }

            this.recordSimpleAdapter = newSimpleAdapter(this,

                    this.recordFiles,R.layout.recordfiles,

                    new String[] {"filename" }, new int[] { R.id.filename });

            this.videolist.setAdapter(this.recordSimpleAdapter);

        }

    }

   

    private class BackOnClickListenerImplimplements OnClickListener {

        @Override

        public void onClick(View v) {

            Intent it = newIntent(BroswerActivity.this,MyMediaRecorderDemo.class) ;

            BroswerActivity.this.startActivity(it);

        }

    }

    private class OnItemClickListenerImplimplements OnItemClickListener {

        @Override

        public voidonItemClick(AdapterView<?> adapter, View view, int position,

                long id) {

            if(BroswerActivity.this.recordSimpleAdapter.getItem(position) instanceof Map) {

                Map<?, ?> map = (Map<?,?>) BroswerActivity.this.recordSimpleAdapter

                        .getItem(position);

                Intent intent = new Intent(BroswerActivity.this,PlayVideoActivity.class);

                intent.putExtra("filepath",

                        BroswerActivity.this.recordVideoSaveFileDir.toString()

                                + File.separator

                                +map.get("filename").toString());

                BroswerActivity.this.startActivity(intent);

            }

        }

       

    }

}

(3)视频播放程序

publicclass PlayVideoActivity extends Activity {

    private ImageButton play = null;

    private ImageButton stop = null;

    private ImageButton back = null;

    private MediaPlayer media = null;

    private SurfaceView sufaceView = null;

    private SurfaceHolder surfaceHolder = null;

    private String filepath = null;

 

    @Override

    public void onCreate(BundlesavedInstanceState) {

        super.onCreate(savedInstanceState);

        super.requestWindowFeature(Window.FEATURE_NO_TITLE);// 不显示标题

        super.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

                WindowManager.LayoutParams.FLAG_FULLSCREEN);

        super.getWindow().addFlags(

                WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);// 高亮的风格显示

        super.setContentView(R.layout.play);

 

        this.filepath =super.getIntent().getStringExtra("filepath") ;

       

        this.play = (ImageButton)super.findViewById(R.id.play);

        this.stop = (ImageButton)super.findViewById(R.id.stop);

        this.back = (ImageButton)super.findViewById(R.id.back);

        this.sufaceView = (SurfaceView)super.findViewById(R.id.surfaceView) ;

        this.surfaceHolder =this.sufaceView.getHolder() ;

        this.surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

        this.media = new MediaPlayer() ;

        this.media.reset() ;

        try {

            this.media.setDataSource(this.filepath);

        } catch (Exception e) {

        }

       

        this.play.setOnClickListener(newPlayOnClickListenerImpl());

        this.stop.setOnClickListener(newStopOnClickListenerImpl());

        this.back.setOnClickListener(newBackOnClickListenerImpl());

    }

 

    private class PlayOnClickListenerImplimplements OnClickListener {

        @Override

        public void onClick(View v) {

            PlayVideoActivity.this.media.setAudioStreamType(AudioManager.STREAM_MUSIC);

            PlayVideoActivity.this.media.setDisplay(PlayVideoActivity.this.surfaceHolder);

            try {

                PlayVideoActivity.this.media.prepare();

                PlayVideoActivity.this.media.start();

            } catch (Exception e) {

            }

        }

    }

 

    private class StopOnClickListenerImplimplements OnClickListener {

        @Override

        public void onClick(View v) {

            PlayVideoActivity.this.media.stop();

        }

    }

 

    private class BackOnClickListenerImplimplements OnClickListener {

        @Override

        public void onClick(View v) {

            Intent it = newIntent(PlayVideoActivity.this, BroswerActivity.class);

            PlayVideoActivity.this.startActivity(it);

        }

    }

    @Override

    public boolean onKeyDown(int keyCode,KeyEvent event) {

        if(keyCode == KeyEvent.KEYCODE_BACK) {

            this.media.stop() ;

            this.media.release() ;

            super.finish() ;

        }

        return false ;

    }

}

(4)定义BrowserActivity程序进行ListView显示时的布局管理器---recordfiles.xml

<?xmlversion="1.0" encoding="utf-8"?>

<TableLayout

    xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent">

    <TableRow>

        <ImageView

            android:id="@+id/icon"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:src="@drawable/file_icon"/>

        <TextView

            android:id="@+id/filename"

            android:textSize="25px"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"/>

    </TableRow>

</TableLayout>

(5)定义BrowserActivity程序的布局管理器---browser.xml

<?xmlversion="1.0" encoding="utf-8"?>

<LinearLayout

    xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent">

    <LinearLayout

        xmlns:android="http://schemas.android.com/apk/res/android"

        android:orientation="horizontal"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:gravity="center">

        <TextView

            android:id="@+id/info"

            android:textSize="25px"

            android:gravity="center"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="视频文件列表" />

        <ImageButton

            android:id="@+id/back"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:src="@drawable/back"/>

    </LinearLayout>

    <ListView

        android:id="@+id/videolist"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"/>

</LinearLayout>

(6)定义视频播放程序PlayVideoActivity的布局管理器---play.xml

<?xmlversion="1.0" encoding="utf-8"?>

<LinearLayout

    xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent">

    <LinearLayout

        xmlns:android="http://schemas.android.com/apk/res/android"

        android:orientation="horizontal"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content">

        <ImageButton

            android:id="@+id/play"

            android:layout_width="wrap_content"

            android:layout_height="fill_parent"

            android:src="@drawable/play"/>

        <ImageButton

            android:id="@+id/stop"

            android:layout_width="wrap_content"

            android:layout_height="fill_parent"

            android:src="@drawable/stop"/>

        <ImageButton

            android:id="@+id/back"

            android:layout_width="wrap_content"

            android:layout_height="fill_parent"

            android:src="@drawable/back"/>

    </LinearLayout>

    <SurfaceView

        android:id="@+id/surfaceView"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"/>

</LinearLayout>

(7)配置权限文件

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

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

    <uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

    <uses-permissionandroid:name="android.permission.CAMERA" />
mediacapture-record:MediaStream录制 MediaStream录制API 本文档指定了本地和远程视频和音频实时录制的方法。 规格和样品 ,包括代码示例。 不同浏览器中的实施状态: 。 欢迎您来贡献! 让我们摆脱困境吧! 关于骑车棚的注意事项 :person_biking: 提交后,分支gh-pages会从main分支自动更新。 在开发过程中,通常最好尝试在本地渲染MediaRecorder.bs并使用在线编译器: curl https://api.csswg.org/bikeshed/ -F file=@MediaRecorder.bs -F force=1 > MediaRecorder.html 如果生成的文件的大小奇怪(即零,几KB),则说明出现了严重错误; 改为运行: curl https://api.csswg.org/bikeshed/ -F file=@MediaRecorder.bs -F output=err 并试图找出为什 立即下载

相关推荐

聊一聊固态电池和钠离子电池新技术

总之,固态电池是一种“安全又高效的未来电池”,它的好处非常明显,但目前还处于研发阶段,离普及还有一段距离。未来,这两种技术可能会与锂离子电池并存,分别满足不同的市场需求。我尝试用最通俗易懂的语言将复杂的技术讲给大家听。钠离子电池和锂离子电池的工作原理很相似,但它用的是。固态电池和钠离子电池是两种正在研发和推广的。,它们有潜力解决现有锂离子电池的部分缺点。,而不是锂(Li)。

weixin_33324696的博客 3333

使用MediaRecoder录制视频

随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666) MediaRecoder除了用于录制音频之外,还可用于录制视频,其步骤与录制音频基本相同,只是录制视频不仅要采集声音,还要采集图像,需要使用SurfaceView来预览显示图像,下面用一个简单示例来演示,代码如下:...

孤云博客 3028

人脸关键点定义汇总

前几天看一份代码临时需要找49个人脸关键点位置定义的图片发现怎么百度都搜不到,最后幸好谷歌可以使用了就用谷歌搜到了。所以在这里汇总一下我所知道的人脸关键点的定义和相关的一点东西,以备不时之需。 68个关键点 最常用的工具是Dlib,网址:http://dlib.net/ dlib的68个特征点检测算法是ERT算法【1】 使用dlib检测68个特征点的python示例见:http://dlib.n...

程序媛 7642

使用javacv录像,同时进行讯飞声纹认证

&#13; 由于最近的demo中需要在活体检测的同时进行音视频录制 ,  尝试使用MediaRecord和camera来录制视频 , 然而Camera.onPreviewFrame 不能与 MediaRecord同时调用。活体检测的原理其实是把camera的预览回调onPreviewFrame(byte[] data, Camera camera) 中的图片数据data作为参...

wc0000000的博客 764

数模笔记_多变量最优化计算之牛顿法

Date: 2_22 Name: Guo Yehao Theme: Calculation in Optimality with multiple variables Reference: 数学建模方法与分析(华章) 在上一节中,我们讨论多变量最优化计算中的随机搜索算法,它的精度并不是众多算法中最高的。在精度问题上,有的时候问题本身就带有明显的误差性,以至于我们不能将其忽略,比如上一节消防站部署的问题,我们在区域划分时就有了误差,因此我们并不需要对结果要求很高的精确度,所以用一些比较粗略的算法就可以.

weixin_45358177的博客 2415

同源策略与跨域

前言:最近业务上前端同学多次联系说访问腾讯云cos资源的时候因为跨域的问题访问不到。大致看了下腾讯云关于设置跨域访问的教程,按照前端同学给的域名等选项就给配了,而且测试下来也是好的。但是呢一直不知道什么是跨域这里就做一个简单的学习记录。 一、同源策略 同源策略(Same Origin Policy)是一种约定,它是浏览器最核心也是最基本的安全功能。同源策略会阻止一个域的javascrip脚本和另一个域的内容进行交互,是用于隔离潜在恶意文件的关键安全机制;关于这一点我们后面会举例说明。...

mijichui2153的博客 1万+

分析使用mediarecord采集的实时流格式

分析使用mediarecord采集的实时流格式 编者:李国帅 qq:9611153 微信lgs9611153 时间:2013-7-13 背景原因: 对使用android自身的录像接口采集的实时流进行远程播放,需要写一个专门的播放程序对流进行适当处理才能进行播放。 差异说明: 采集mediarecord实时流传输时,和3gp或者mp4文件格式不同,因为实时流中每一帧的第一个4字节...

lgs7907 901

高云FPGA系列教程(2):FPGA点灯工程创建、程序下载和固化

相比于国外FPGA厂商EDA开发环境,几个G到几十个G的大小,高云云源软件安装包也很小巧,界面也很简洁,综合速度非常快,是我没想到的,好像在使用单片机一样,点一下就编译完成了,以本文简单的LED示例工程为例,比特流文件几乎在几秒钟内生成;无论是下载比特流文件到RAM还是Flash中,速度都很快,而且只有一种fs程序文件格式,不用再进行bit/mcs转换;云源软件自带的编辑器也很好用,和Notepad++界面差不多,而且快捷键很方便,具有基本的自动补全功能。

whik1194的博客 5460

mediarecoder 安卓_Android使用MediaRecorder类进行录制视频

脚本之家提醒大家使用MediaRecorder录音录像的设置代码步骤一定要按照API指定的顺序来设置,否则报错步骤为:1、设置视频源,音频源,即输入源2、设置输出格式3、设置音视频的编码格式一、首先看布局文件,这里有一个SurfaceView,这是一个绘制容器,可以直接从内存或者DMA等硬件接口取得图像数据,xmlns:tools="http://schemas.android.com/tools...

weixin_42298727的博客 445

一.镜头知识之焦点,焦距,有效焦距,前焦距,后焦距

由光学系统中镜片的最后一面到像面的距离。

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 5576

【AI就业干货12】机器学习八股文速通:从损失函数到 XGBoost,一篇带走全部面试点

本文总结了机器学习面试的核心知识点,涵盖监督与非监督学习、线性模型、正则化、决策树、KNN/K-means、SVM、集成学习、梯度下降、评估指标、特征工程、降维、概率模型等内容。重点包括:损失函数选择(MSE/交叉熵)、正则化作用(L1稀疏/L2平滑)、决策树划分准则、集成学习方法(Bagging降方差/Boosting降偏差)、XGBoost优化等。提供了30秒速记口诀和XGBoost代码示例,帮助快速掌握面试要点。全文采用公式+代码+口诀的形式,系统梳理了机器学习从理论到实践的常见考点。

m0_51738372的博客 731

Android中音频视频录制用到的类 MediaRecoder的用法

首先,先加个权限                 布局文件,视频播放用的是SurfaceView 两个Button按钮,开始与结束  下面是具体实现代码 public class MainActivity extends Activity implements SurfaceHolder.Callback {       private Bu

Zhangxuexue_的博客 645

JS逆向-B站评论数据w_rid参数和wts参数

本文是该专栏的第69篇,后面会持续分享python爬虫干货知识。本文以B站的评论数据为例,通过JS逆向获取其中的w_rid参数以及wts参数生成规律。具体的“逆向”思路逻辑,笔者将会详细介绍每个步骤,并且将在正文结合“完整代码”来详细介绍。废话不多说,具体细节部分以及详细思路逻辑,笔者将在正文结合完整代码进行详细说明。(附带完整代码)

Python进阶专栏《爬虫实战进阶》,《Pyppeteer从入门到精通》原创作者 2048

MediaRecoder 人脸录制

最近研究通过h5+的API录制视频用作人脸识别,编写了一个demo,附上源码,分享一下。 <!DOCTYPE html> <!-- saved from url=(0075)https://wendychengc.github.io/media-recorder-video-canvas/cameracanvas.html --> <html><head...

W_Tian的博客 740

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

mediarecoder 安卓_【流媒體】Android 实时视频采集—MediaRecoder录制

private boolean initializeVideo(){try{Log.i(TAG,"##initializeVideo....");//〇state: Initial 实例化MediaRecorder对象 if (mSurfaceView == null){Log.e(TAG,"mSurfaceView is null in initializeVideo");...

weixin_35019134的博客 186

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Android之MediaRecoder录制视频

使用MediaRecorder和SurfaceView录制视频 手机一般都提供麦克风和摄像头硬件,而Android系统可以利用该硬件来录制视频了 ——使用MediaRecorder录制视频的步骤:  1)创建MediaRecorder对象  2)调用MediaRecorder对象的setVideoSource()方法设置视频的来源,一般传入MediaRecorder.VideoSour

重心开始,重新开始 1353

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

利用MediaRecoder类进行音频录制,自己试试哦

媒体录制类:android.media.MediaRecoder类,可以实现音频和视频文件的录制。生命周期: a.Initial状态:当用户通过MediaRecoder类的构造方法实例化MediaRecoder类对象时出于初始化状态,即便此时没有任何操作,MediaRecoder也会占用系统资源,而所有的状态都可以通过reset()方法返回到此状态。 b.Initialized状态:当用户使用

ErikChan的博客 573

[流媒体]Android 实时视频采集—MediaRecoder录制

http://www.cnblogs.com/skyseraph/archive/2012/03/31/2427593.html 0 啰嗦   本篇的存在只是为系列的连贯性,其实在前面系列博文中对MediaRecoder已有用到,详见前面Android系列博文Android(19) 1 概述   通过Android的MediaRecorder,在SetoutputFile函数中

victoryckl的专栏 1239

【流媒體】Android 实时视频采集—MediaRecoder录制

SkySeraph Mar 31st 2012 Email:zgzhaobo@gmail.com    QQ:452728574 0 啰嗦   本篇的存在只是为系列的连贯性,其实在前面系列博文中对MediaRecoder已有用到,详见前面Android系列博文Android(19) 1 概述   通过Android的MediaRecorder,在SetoutputFile函数中绑

wind的专栏 2422

Android 实时视频采集—MediaRecoder录制

http://www.cnblogs.com/skyseraph/archive/2012/03/31/2427593.html 【流媒體】Android 实时视频采集—MediaRecoder录制 SkySeraph Mar 31st 2012 Email:skyseraph00@163.com  0 啰嗦   本篇的存在只是为系列的连贯性,其实在前面系

mengzhengjie的专栏 1578

android--分段录制视频

最近项目的一个奇葩需求要求客户端分段录制视频上传到后台,实现伪直播,文件格式要求mp4(h264+aac); 首先想到的方案肯定是直接利用MediaRecoder+setMaxDuration 来实现,但是这种方式在完成某段录制,开始下段录制之前,中间有间隔时间,这个时间甚至可以达到1s, 因此在播放时会造成视频画面不连续。 为了解决这个问题,可以在手机端分别采集音视频流,通过Me...

111111的专栏 4374

Android 中使用MediaRecorder进行录像详解(视频录制)

简单的视频录制功能. package com.video; import java.io.IOException; import android.app.Activity; import android.content.pm.ActivityInfo; import android.graphics.PixelFormat; import android.media.Media

如果可以,我愿争取 719

mediacodec mediaRecoder

If the high level interfaces (MediaPlayer, MediaRecorder) can do what you want (play back video from a format that the system supports to the display, or record video from the camera into a file), you should probably just use them, it will be much much sim

一只小仙女的博客 614

android视频采集技术,Android中MediaRecorder类实现视频录制 Android开发技术

Android中MediaRecorder类实现视频录制 Android开发技术2013 年 4 月 2 日在最新的Android 1.5版本中开始支持视频录制功能,通过MediaRecorder类的相关方法可以录制视频保存成为MPEG4、H.263和H.264编码的视频。这里很多网友发现自己的代码无法正常执行,首先确定设计预览对象Surface,可以通过setPreviewDisplay()方法...

weixin_39589557的博客 110

android视频分辨率压缩,surfaceview+MediaRecorder 视频录制压缩

(Android)项目中用到了MediaRecorder进行视频的录制,但是做的过程中不知是我的代码问题还是mui本身的问题 ,当我调用这个方法时mediarecorder.setPreviewDisplay(surfaceview.getHolder().getSurface());总是掉不出来,总是报错!附上代码:var ioOptions = plus.android.importClass...

weixin_39758048的博客 736

Android多媒体四:MediaRecorder录制视频短片

Android多媒体四:MediaRecorder录制视频短片 MediaRecorder除了可用于录制音频之外,还可用于录制视频,使用MediaRecorder录制视频与录制音频的步骤基本相同。 只是录制视频时不仅需要采集声音,还需要采集图像。为了让MediaRecorder录制时采集图像,应该在调用setAudioSource(int audio_source)方法时 再调用setVideo...

zk的博客 360
上一篇: 利用MediaRecoder类进行音频录制,自己试试哦
下一篇: Activity生命周期
ErikChan.hk
博客等级 码龄12年 107粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值