当前位置: 首页 > news >正文

动态网站建设方面的书/seo关键词排名查询

动态网站建设方面的书,seo关键词排名查询,基于html5的旅游网站开发,wordpress zzdgm随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666) MediaRecoder除了用于录制音频之外,还可用于录制视频,其步骤与录制音频基本相同,只是录制视频不仅要采集声音,还要…

随时随地技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)

MediaRecoder除了用于录制音频之外,还可用于录制视频,其步骤与录制音频基本相同,只是录制视频不仅要采集声音,还要采集图像,需要使用SurfaceView来预览显示图像,下面用一个简单示例来演示,代码如下:

Activity:

package com.home.recordvideo;import java.io.File;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;
import android.widget.Toast;public class RecordVedioActivity extends Activity implements OnClickListener {private Button recordBtn, stopBtn;// 系统的视频文件private File videoFile;private MediaRecorder mRecorder;// 显示视频预览的SurfaceViewprivate SurfaceView sView;// 记录是否正在进行录制private boolean isRecording;private SurfaceHolder sholder;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);recordBtn = (Button) findViewById(R.id.main_btn_record);stopBtn = (Button) findViewById(R.id.main_btn_stop);// 让stopBtn按钮不可用stopBtn.setEnabled(false);stopBtn.setOnClickListener(this);recordBtn.setOnClickListener(this);// 获取界面中的SurfaceViewsView = (SurfaceView) findViewById(R.id.main_sView);sholder = sView.getHolder();// 设置SurfaceView不需要自己维护缓冲区sholder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);// 设置分辨率sholder.setFixedSize(800, 480);// 设置该组件让屏幕不会自动关闭sholder.setKeepScreenOn(true);}@Overridepublic void onClick(View v) {if (v == recordBtn) {if (!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {Toast.makeText(RecordVedioActivity.this, "SD卡不存在,请插入SD卡!",Toast.LENGTH_SHORT).show();return;}try {// 创建保存录制视频的视频文件videoFile = new File(Environment.getExternalStorageDirectory().getCanonicalFile() + "/yvideo.mp4");// 创建MediaRecorder对象mRecorder = new MediaRecorder();mRecorder.reset();// 设置从麦克风采集声音mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 设置从摄像头采集图像mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);// 设置视频文件的输出格式(必须在设置声音编码格式、图像编码格式之前设置)mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);// 设置声音的编码格式mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);// 设置图像的编码格式mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);mRecorder.setVideoSize(800, 480);// 每秒4帧mRecorder.setVideoFrameRate(4);mRecorder.setOutputFile(videoFile.getAbsolutePath());// 指定使用SurfaceView来预览视频mRecorder.setPreviewDisplay(sView.getHolder().getSurface());mRecorder.prepare();// 让record按钮不可用recordBtn.setEnabled(false);// 让stopBtn按钮可用stopBtn.setEnabled(true);isRecording = true;// 开始录制mRecorder.start();System.out.println("-----recording-----");} catch (Exception e) {e.printStackTrace();}}if (v == stopBtn) {// 如果正在录制视频if (isRecording) {// 停止录制mRecorder.stop();// 释放资源mRecorder.release();mRecorder = null;// 让record按钮可用recordBtn.setEnabled(true);// 让stopBtn按钮不可用stopBtn.setEnabled(false);}}}}

布局XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center_horizontal"android:orientation="horizontal" ><Buttonandroid:id="@+id/main_btn_record"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="录制视频" /><Buttonandroid:id="@+id/main_btn_stop"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="停止录制" /></LinearLayout><SurfaceViewandroid:id="@+id/main_sView"android:layout_width="match_parent"android:layout_height="match_parent" /></LinearLayout>

加上如下权限:

    <!-- 授予该程序录制声音的权限 --><uses-permission android:name="android.permission.RECORD_AUDIO" /><!-- 授予该程序使用摄像头的权限 --><uses-permission android:name="android.permission.CAMERA" /><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /><!-- 授予该程序使用外部存储器的权限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />




 

http://www.lbrq.cn/news/1046359.html

相关文章:

  • 江苏纬信网站建设/百度网盘网页版官网
  • 网站首页权重/谷歌搜索关键词排名
  • linux做网站优势/网络信息发布平台
  • 源码论坛下载/建设优化网站
  • 武汉建设厅宿舍网站/网站怎么才能被百度收录
  • 手机端便民服务平台网站建设/在哪里找软件开发公司
  • 免费的cms有哪些平台/郑州百度seo网站优化
  • 外卖平台做网站/怎么网站排名seo
  • 楼凤网站怎么做的/东莞网站推广企业
  • 生日网页制作免费网站制作/搜索百度网页版
  • 专业微网站建设公司首选公司/seo职业规划
  • 马和人做人和牛做网站/网址大全123
  • 做网站的项目职责怎么写/长春网站制作方案定制
  • 做问卷的网站生成二维码/大数据智能营销
  • 购物车网站源码/如何做推广最有效果
  • 怎么做有趣的视频网站/网络营销公司如何建立
  • 网站建设公司价位/杭州网站seo公司
  • 呼市做开发网站的公司/成都关键词seo推广平台
  • wordpress的根目录/广州seo优化费用
  • 想自己做个网站/天津疫情最新消息
  • 企业网站建设方案 word/高级搜索
  • 做土特产的网站/上海今天最新发布会
  • 东莞做网站公司/免费企业建站
  • 网站模板d一品资源网/百度图片收录提交入口
  • 深圳招聘网站开发/曲靖百度推广
  • 服装公司网站设计/在百度怎么创建自己的网站
  • 帮客户做网站内容/各种资源都有的搜索引擎
  • 免费微商城网站建设/企业网站seo服务
  • 网站建设 增值税税率/seo服务方案
  • 成都 广告公司网站建设/自己建网站怎样建
  • 麦当秀|MINDSHOW:在线AI PPT设计工具
  • 从浅拷贝到深拷贝:C++赋值运算符重载的核心技术
  • [案例十] NX二次开发批量替换组件功能(装配环境)
  • 解决flex元素内部文本溢出的问题min-width: 0
  • 【华为机试】63. 不同路径 II
  • 在Java中,守护线程(Daemon Thread)和用户线程(User Thread)以及本地线程(Native Thread)的区别