分类:C#、Android、VS2015;

创建日期:2016-03-11

一、简介

Android提供了常见的多媒体文件编码、解码机制,你可以直接调用Android提供的API,实现相册、播放器、录音、摄像等功能。换言之,你可以通过Activity和Intent,直接访问各种多媒体文件或流数据(本地媒体文件、外部存储文件、资源文件、URL指定的音频视频网络流)。

本章要点:

  • 音频和视频播放:MediaPlayer类。
  • 播放视频播放:MediaPlayer类、MediaController类和VideoView控件。
  • 录制音频和视频:MediaRecorder类。

这一章主要介绍音频、视频、拍照、语音合成(中英文朗读)等相关的基础知识。

二、Resources/raw文件夹与Assets文件夹的区别

由于这一章播放的文件都保存在这两个文件夹下,所以先把这两者之间的区别说一下。

1、相同点

这两个文件夹下的文件打包后都会以独立文件的形式保存在apk安装包中,原来的文件是什么格式还是什么格式,都不会被编译到可执行的二进制文件中。

2、不同点

(1)Resources/raw文件夹下不能再包含子文件夹,而Assets文件夹下还可以再继续创建子文件夹。

(2)Resources/raw文件夹下的文件会被映射到Resource.Designer.cs文件中,因此项目中可直接使用文件的资源ID访问它(即Resource.Id.不带扩展名的文件名),该文件夹的作用相当于WPF项目中“链接的资源”文件类型;Assets文件夹下的文件则不会被映射到Resource.Designer.cs文件中,只能通过AssetManager类来访问它,该文件夹的作用相当于WPF项目中的“内容”文件类型。

3、读取数据流

假如保存到这两个文件夹下的文件名都是abc.mp3,则

读取Resources/raw下文件流的方式如下(资源id就是不带扩展名的文件名):

System.IO.Stream stream = Resources.OpenRawResource(Resource.Id.abc);

读取Assets下的文件流的方式如下(用带路径和扩展名的文件名指定,如果没有子文件夹,可直接写文件名):

System.IO.Stream stream = Resources.Assets.Open("abc.mp3");

4、用VideoView播放视频

假如保存到这两个文件夹下的文件名都是abc.mp4,而且用最常用的VideoView来播放该视频,下面的办法演示了如何指定要播放的文件。

播放Resources/raw下的该文件:

VideoView.SetVideoUri(Uri.Parse("android.resource://" + PackageName + "/" + Resorce.Raw.abc));

三、本章示例主界面

1、运行截图

2、ch.cs文件中与本章示例相关的代码

chItems.Add(new Chapter()
{
ChapterName = "第20章 音频、视频、拍照、截图",
ChapterItems = new ChItem[]
{
new ChItem { type=typeof(ch2001MainActivity), Title="例20-1 音频播放基本用法", Desc = "演示音频播放的基本用法" },
new ChItem { type=typeof(ch2002MainActivity), Title="例20-2 视频播放基本用法", Desc = "演示视频播放的基本用法" },
new ChItem { type=typeof(ch2003MainActivity), Title="例20-3 拍照和视频录制基本用法", Desc = "演示相机拍照和视频录制的基本用法" },
new ChItem { type=typeof(ch2004MainActivity), Title="例20-4 录音基本用法", Desc = "演示录制音频的基本用法" },
new ChItem { type=typeof(ch2005MainActivity), Title="例20-5 百度tts基本用法", Desc = "演示利用百度tts将文本转换为语音的基本用法" }
}
});

【Android】20.0 第20章 音频、视频、拍照、语音合成的更多相关文章

  1. 【转】android如何浏览并选择图片 音频 视频

    转自:http://www.cnblogs.com/top5/archive/2012/03/06/2381986.html   这几天 在学习并开发android系统的图片浏览 音频 视频 的浏览 ...

  2. linux(centos8):prometheus使用alertmanager发送报警邮件(prometheus 2.18.1/alertmanager 0.20.0)

    一,alertmanager的用途 1,Alertmanager的作用: Alertmanager是一个独立的报警模块, 它接收Prometheus等客户端发来的警报,并通过分组.删除重复等处理, 通 ...

  3. Skipping 'Android SDK Tools, revision 24.0.2'; it depends on 'Android SDK Platform-tools, revision 20' which was not installed.

    前几天,同事问我eclipse android sdk怎么不能更新. 更新界面是显示(mirrors.neusoft.edu.cn:80),但是不能更新. 问题描述如下: URL not found: ...

  4. This Android SDK requires Android Developer Toolkit version 20.0.0 or above

    本人最近在操作更新ANDROID SDK时出现类似于题目中的错误,是一启动ECLIPSE时.但是,我现在只是想恢复到原先的开发环境.于是找到本文,方法有效!!! windows 下面安装Android ...

  5. 【转】This Android SDK requires Android Developer Toolkit version 20.0.0 or above

    本人最近在操作更新ANDROID SDK时出现类似于题目中的错误,是一启动ECLIPSE时.但是,我现在只是想恢复到原先的开发环境.于是找到本文,方法有效!!! windows 下面安装Android ...

  6. Windows Phone 8初学者开发—第20部分:录制Wav音频文件

    原文 Windows Phone 8初学者开发—第20部分:录制Wav音频文件 原文地址:http://channel9.msdn.com/Series/Windows-Phone-8-Develop ...

  7. hadoop2.20.0集群安装教程

    一.安装的需要软件及集群描述 1.软件: Vmware9.0:虚拟机 Hadoop2.2.0:Apache官网原版稳定版本 JDK1.7.0_07:Oracle官网版本 Ubuntu12.04LTS: ...

  8. 【3D动画建模设计工具】Maxon Cinema 4D Studio for Mac 20.0

    图标 Icon   软件介绍 Description Maxon Cinema 4D Studio R20 ,是由德国公司Maxon Computer一款适用于macOS系统的3D动画建模设计工具,是 ...

  9. 调用类java.lang.Math的成员方法"public static double random"运算下面表达式10000次,统计其中生成的整数0,1,2,.....20的个数分别是多少,并输出统计结果.(int)(Math.random()*20+0.5)

    public class Test2 { public static void main(String args[]){ int num; int count[]=new int[21]; for(i ...

随机推荐

  1. Python标记去重

    预逻辑脚本代码: uniqueList = [] def isDuplicate(inValue): if inValue in uniqueList: return 1 else: uniqueLi ...

  2. 生成activiti需要的25张系统表

    Activiti的运行支持,必须要有Activiti的25张表,主要是在流程运行过程中,记录存储一些参与流程的用户主体, 组,以及流程定义的存储,流程执行时候的一些信息,以及流程的历史信息等. 下面我 ...

  3. linux 文件查找,which,whereis,locate,find

    linux 文件查找,which,whereis,locate,find 一:which 主要用于查找可执行命令的所在位置: 如图,查找命令 ls的目录: 二:whereis 主要用于查找命令的帮助文 ...

  4. Xcode插件,模板安装

    一:是使用工具安装 A Package Manager for Xcode -Xcode模板管理工具Alcatraz使用 二:手动安装 1:打开资源库: 打开Finder---按住alt----前往- ...

  5. Linux获得命令帮助(学习笔记五)

    一.获得命令帮助 1.1.内部命令与外部命令 简单来说,在linux系统中有存储位置的命令为外部命令: 没有存储位置的为内部命令,可以理解为内部命令嵌入在linux的shell中,所以看不到. typ ...

  6. rmdir 命令(转)

    原文:http://www.cnblogs.com/peida/archive/2012/10/27/2742076.html rmdir命令.rmdir是常用的命令,该命令的功能是删除空目录,一个目 ...

  7. PyQt5教程——介绍(1)

    PyQt5教程阅读须知 “PyQt5教程”系列若不做明显提示,默认翻译自zetcode. 有需要翻译精度的朋友可以自行阅读英文文档. 如果本系列博文侵犯了您的合法权益,请在博客中留下评论或联系:che ...

  8. java面试第七天

    反射: 反射:在运行时动态分析或使用一个类进行工作. java.lang.Class类:描述类信息的类. 类对象:描述一个类信息的对象,当虚拟机加载类的时候,就会创建这个类的类对象并加载该对象,Cla ...

  9. 包装类、object、单例模式、final、抽象类

    /*包装类*/ /*  byte   Byte  short   Short  int    Integer  long   Long  char   Character  float   Float ...

  10. @Value 配置bean的方法