Android视录视频示例
这几天需要搞一个Android视频通话功能,从最简单的视频录制开始,网上例子大多不完整。下面的示例参考过别人的代码,还是拿出来给需要的朋友分享下。
Activity类:VideoActivity
- package com.media.Media;
- import java.io.File;
- import java.io.IOException;
- import android.app.Activity;
- import android.media.MediaRecorder;
- import android.os.Bundle;
- import android.os.Environment;
- import android.view.SurfaceHolder;
- import android.view.SurfaceView;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- public class VideoActivity extends Activity {
- private File myRecAudioFile;
- private SurfaceView mSurfaceView;
- private SurfaceHolder mSurfaceHolder;
- private Button buttonStart;
- private Button buttonStop;
- private File dir;
- private MediaRecorder recorder;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.video);
- mSurfaceView = (SurfaceView) findViewById(R.id.videoView);
- mSurfaceHolder = mSurfaceView.getHolder();
- mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
- buttonStart=(Button)findViewById(R.id.start);
- buttonStop=(Button)findViewById(R.id.stop);
- File defaultDir = Environment.getExternalStorageDirectory();
- String path = defaultDir.getAbsolutePath()+File.separator+"V"+File.separator;//创建文件夹存放视频
- dir = new File(path);
- if(!dir.exists()){
- dir.mkdir();
- }
- recorder = new MediaRecorder();
- buttonStart.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- recorder();
- }
- });
- buttonStop.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- recorder.stop();
- recorder.reset();
- recorder.release();
- recorder=null;
- }
- });
- }
- public void recorder() {
- try {
- myRecAudioFile = File.createTempFile("video", ".3gp",dir);//创建临时文件
- recorder.setPreviewDisplay(mSurfaceHolder.getSurface());//预览
- recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);//视频源
- recorder.setAudioSource(MediaRecorder.AudioSource.MIC); //录音源为麦克风
- recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//输出格式为3gp
- recorder.setVideoSize(800, 480);//视频尺寸
- recorder.setVideoFrameRate(15);//视频帧频率
- recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);//视频编码
- recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//音频编码
- recorder.setMaxDuration(10000);//最大期限
- recorder.setOutputFile(myRecAudioFile.getAbsolutePath());//保存路径
- recorder.prepare();
- recorder.start();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
界面:video.xml
- <?xml version="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">
- <SurfaceView android:id="@+id/videoView"
- android:visibility="visible"
- android:layout_width="320px"
- android:layout_height="240px">
- </SurfaceView>
- <RelativeLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content">
- <Button
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="录制"
- android:id="@+id/start"/>
- <Button
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_toRightOf="@id/start"
- android:text="停止"
- android:id="@+id/stop"/>
- </RelativeLayout>
- </LinearLayout>
权限配置:AndroidManifest.xml
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.media.Media"
- android:versionCode="1"
- android:versionName="1.0">
- <application android:icon="@drawable/rabbit" android:label="@string/app_name">
- <activity android:name=".VideoActivity"
- android:label="@string/app_name">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application>
- <uses-sdk android:minSdkVersion="7" />
- <uses-permission android:name="android.permission.CAMERA"/>
- <uses-permission android:name="android.permission.RECORD_AUDIO"/>
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
- </manifest>
希望对需要的人有帮助。
http://www.xker.com/page/e2011/0320/100584.html
Android视录视频示例的更多相关文章
- 基于 Android 的 3D 视频示例代码
笔者:Mark Liu 下载样本代码 简单介绍 在Android 中,创建一个可以播放视频剪辑的应用很easy:创建一个採用 3D 图形平面的游戏应用也很easy.可是,创建一个可以在 3D 图形对象 ...
- Android实现录屏直播(三)MediaProjection + VirtualDisplay + librtmp + MediaCodec实现视频编码并推流到rtmp服务器
请尊重分享成果,转载请注明出处,本文来自Coder包子哥,原文链接:http://blog.csdn.net/zxccxzzxz/article/details/55230272 Android实现录 ...
- Android 音视频深入 五 完美的录视频(附源码下载)
本篇项目地址,名字是录视频,求star https://github.com/979451341/Audio-and-video-learning-materials 这一次的代码录视频在各个播放器都 ...
- Android录屏命令、Android录Gif、Android录视频
NoHttp开源地址:https://github.com/yanzhenjie/NoHttp NoHttp具体使用文档已公布,你想知道的全都有,请点我移步! 版权声明:转载请注明本文转自严振杰的博客 ...
- Android 音视频深入 四 录视频MP4(附源码下载)
本篇项目地址,名字是<录音视频(有的播放器不能放,而且没有时长显示)>,求star https://github.com/979451341/Audio-and-video-learnin ...
- 最简单的视音频播放示例7:SDL2播放RGB/YUV
本文记录SDL播放视频的技术.在这里使用的版本是SDL2.实际上SDL本身并不提供视音频播放的功能,它只是封装了视音频播放的底层API.在Windows平台下,SDL封装了Direct3D这类的API ...
- 最简单的视音频播放示例6:OpenGL播放YUV420P(通过Texture,使用Shader)
本文记录OpenGL播放视频的技术.上一篇文章中,介绍了一种简单的使用OpenGL显示视频的方式.但是那还不是OpenGL显示视频技术的精髓.和Direct3D一样,OpenGL更好的显示视频的方式也 ...
- Android实现录屏直播(一)ScreenRecorder的简单分析
http://blog.csdn.net/zxccxzzxz/article/details/54150396 Android实现录屏直播(一)ScreenRecorder的简单分析 Android实 ...
- Android开发笔记——视频录制播放常见问题
本文分享自己在视频录制播放过程中遇到的一些问题,主要包括: 视频录制流程 视频预览及SurfaceHolder 视频清晰度及文件大小 视频文件旋转 一.视频录制流程 以微信为例,其录制触发为按下(住) ...
随机推荐
- UVA821 floyd最短路+暴力
题意:给n条边,求每两个点之间的平均距离: 思路:数据是100条边,用floyd得到每两点之间的最短距离,然后遍历相加除以边的数目: #include <iostream> #includ ...
- JQuery源码分析(四)
jQuery多库共存处理 多库共存换句话说可以叫无冲突处理. 总的来说会有2种情况会遇到: 1.$太火热,jQuery采用$作为命名空间,不免会与别的库框架或者插件相冲突. 2.jQuery版本更新太 ...
- iOS-Block两个界面传值
先说一下思路: 首先,创建两个视图控制器,在第一个视图控制器中创建一个Label和一个Button,其中Label是为了显示第二个视图控制器传过来的字符串, Button是为了push到第二个界面. ...
- js去掉空格
去除字符串左右两端的空格,在vbscript里面可以轻松地使用 trim.ltrim 或 rtrim,但在js中却没有这3个内置方法,需要手工编写.下面的实现方法是用到了正则表达式,效率不错,并把这三 ...
- for else
- angularjs 不同的controller之间值的传递
Sharing data between controllers in AngularJS I wrote this article to show how it can possible to pa ...
- qemu源码架构
前言:本文主要概括了QEMU的代码结构,特别从代码翻译的角度分析了QEMU是如何将客户机代码翻译成TCG代码和主机代码并且最终执行的过程.并且在最后描述了QEMU和KVM之间联系的纽带. 申明:本文前 ...
- twisted 初体验
前言: 最近帮朋友review其模块服务代码, 使用的是python的twisted网络框架. 鉴于之前并没有使用过, 于是决定好好研究一番. 个人接触最早的高性能网络编程框架是Mina, 所谓先入为 ...
- Codeforces Round #303 (Div. 2) C dp 贪心
C. Woodcutters time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- 深入理解HTTP
深入理解HTTP协议(转) http协议学习系列 1. 基础概念篇 1.1 介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(Wo ...