分类: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. PHP表单-PHP $_POST 变量

    PHP $_POST 变量 在 PHP 中,预定义的 $_POST 变量用于收集来自 method="post" 的表单中的值. $_POST 变量 预定义的 $_POST 变量用 ...

  2. which命令(转)

    原文:http://www.cnblogs.com/peida/archive/2012/11/08/2759805.html 我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一 ...

  3. Electron 入门案例1

    1:package.json 通过npm init生成package.json文件,内容如下: { "name": "t02", "version&q ...

  4. Speculative Execution in Hadoop

    来自:http://blog.csdn.net/macyang/article/details/7880671 所谓的推测执行,就是当所有task都开始运行之后,Job Tracker会统计所有任务的 ...

  5. Linux高性能server编程——多线程编程(下)

    多线程编程 条件变量 假设说相互排斥锁是用于同步线程对共享数据的訪问的话.那么条件变量则是用于线程之间同步共享数据的值. 条件变量提供了一种线程间的通信机制:当某个共享数据达到某个值得时候,唤醒等待这 ...

  6. 输出python的help结果到文件中

    1.命令行方式: python -c "import sys; help(sys.exit)" > help.txt 2.函数代码的方式输出 def help_output( ...

  7. 好记性不如烂笔头77-多线程-Thread子类的线程对象是不同的

    Thread子类的线程对象是不同的. 比方: EasySelfThread thread = new EasySelfThread(); //同一个线程对象 Thread t1 = new Threa ...

  8. 怎样让CodeBlocks支持C99

    转载请注明出处,否则将追究法律责任http://blog.csdn.net/xingjiarong/article/details/47080303 CodeBlocks是一个写C/C++的比較好的编 ...

  9. CMake 基本用法--写CMakeList.txt

    http://techbase.kde.org/Development/Tutorials/CMake_(zh_CN) http://www.cmake.org/Wiki/CMake 这一章将从软件开 ...

  10. 新浪微博api出现认证失败问题 (获取code字段值的问题)

    出现该提示的原因:`` - 说: (2015-10-30 18:06:14)回调地址不一致,`` - 说: (2015-10-30 18:07:38)请在编辑开发者信息中将网站地址和应用信息--高级信 ...