2009年5月11日

Android中多媒体处理

1.概述
Android平台内置了常用类型媒体的编解码,可以在应用中方便地集成他们。访问平台的媒体能力是很直观简单的—可以使用相同的Intent和Activity机制。
Android能够从多个数据来源播放音视频:存在应用的资源目录中(raw resources)、文件系统中或者来自网络。通过android.media.MediaPlayer来播放。

平台同时也允许通过android.media.MediaRecorder录音视频,当然要硬件支持(模拟器可不行~要在真机上)。
Android1.5支持如下的媒体类型:

类型

格式

编码

解码

详情

文件类型

Audio

AAC LC/LTP


Y

/双声道160Kpbs的码率,采样4-48KHz


3GPP(.3gp)

MPEG-4(.mp4,.m4a)

不支持raw AAC(.aac)

HE-AACv1

(AAC+)


Y

HE-AACv2

(增强AAC+)


Y

AMR-NB

Y

Y

4.75 to 12.2 kbps sampled @ 8kHz

3GPP (.3gp)

AMR-WB


Y

9 rates from 6.60 kbit/s to 23.85 kbit/s sampled @ 16kHz

3GPP (.3gp)

MP3


Y

Mono/Stereo 8-320Kbps constant (CBR) or variable bit-rate (VBR)

MP3 (.mp3)

MIDI


Y

MIDI Type 0 and 1. DLS Version 1 and 2. XMF and Mobile XMF. Support for ringtone formats RTTTL/RTX, OTA, and iMelody

Type 0 and 1 (.mid, .xmf, .mxmf). Also RTTTL/RTX (.rtttl, .rtx), OTA (.ota), and iMelody (.imy)

Ogg Vorbis


Y


Ogg (.ogg)

PCM/WAVE


Y

8- and 16-bit linear PCM (rates up to limit of hardware)

WAVE (.wav)

Image

JPEG

Y

Y

Base+progressive

JPEG(.jpg)

GIF


Y


GIF(.gif)

PNG


Y


PNG(.png)

BMP


Y


BMP(.bmp)

Video

H.263

Y

Y


3GPP (.3gp)


H.264 AVC


Y


3GPP (.3gp) and MPEG-4 (.mp4)


MPEG-4 SP


Y


3GPP (.3gp)

T1还额外支持了:AudioWMAVideoWMV类型。

2.播放

播放很简单,但从资源中播放和从文件/网络中播放还是有些区别,先说从资源中播放:

开始播放:MediaPlayer mp=MediaPlayer.create(context,R.raw.xxx);-->mp.start();
停止/播放:mp.stop()-->mp.reset();mp.prepare()-->mp.start();
暂停/播放:mp.pause()-->mp.start();

从文件/网络中播放:

开始播放:
MediaPlayer mp=new MediaPlayer.create();
mp.setDataSource(PATH_TO_FILE);
mp.prepare();
mp.start();
停止/播放和暂停/播放和上面一样。

3.录制
录制要稍微复杂一些,按照步骤:
  • 实例化MediaRecorder:mr=new MediaRecorder();
  • 初始化mr:mr.setAudioSource(MIC)/setVideoSource(CAMERA);必须在配置DataSource之前调用。
  • 配置DataSource:设置输出文件格式(参见上表)/路径,编码器(参见上表)等
  • 准备录制:mr.prepare();
  • 开始录制:mr.start();
  • 停止录制:mr.stop();
  • 释放资源:mr.release();
学习这部分内容的时候,就想到对电话录音是个不错的主意。一google,发现早就有这个软件了,但有一个问题就是声音只能从MIC中录入(录音的效果不是很好),受限于基带处理器,不能直接获取通话的声音记录,以后会不会开放这个功能接口?
http://groups.google.com/group/android-developers/browse_thread/thread/355254941f17aa17

转:Android系统文件夹结构解析

和我在1.1的模拟器上看到的不太一样,估计是1.0版本的文件夹结构。

Android系统文件夹结构解析:


\system\app
这个里面主要存放的是常规下载的应用程序,可以看到都是以APK格式结尾的文件。在这个文件夹下的程序为系统默认的组件,自己安装的软件将不会出现在这里,而是\data\文件夹中。

\system\bin
这个目录下的文件都是系统的本地程序,从bin文件夹名称可以看出是binary二进制的程序,里面主要是Linux系统自带的组件(命令)

\system\etc
从文件夹名称来看保存的都是系统的配置文件,比如APN接入点设置等核心配置。

\system\fonts
字体文件夹,除了标准字体和粗体、斜体外可以看到文件体积最大的可能是中文字库,或一些unicode字库,从T-Mobile G1上可以清楚的看到显示简体中文正常,其中DroidSansFallback.ttf文件大小 。

\system\framework
framework主要是一些核心的文件,从后缀名为jar可以看出是是系统平台框架。

\system\lib
lib目录中存放的主要是系统底层库,一些so文件,如平台运行时库。

\system\media
\system\media\audio
铃声音乐文件夹,除了常规的铃声外还有一些系统提示事件音

\system\sounds
默认的音乐测试文件,仅有一个test.mid文件,用于播放测试的文件。

\system\usr
用户文件夹,包含共享、键盘布局、时间区域文件等。

2009年5月10日

转:华为任正非内部讲话:论灰色管理与职业化

http://www.cnwnews.com/html/biz/cn_srxy/syxz/20090510/107147.html

什么是职业化?就是在同一时间、同样的条件,做同样的事的成本更低,这就是职业化。

管理改革要继续坚持从实用的目的出发,达到适用目的的原则。

在管理改进中,要继续坚持遵循“七反对”的原则。“坚决反对完美主义,坚决反对繁琐哲学、坚决反对盲目的创新,坚决反对没有全局效益提升的局部优化,坚决反对没有全局观的干部主导变革,坚决反对没有业务实践经验的人参加变革,坚决反对没有充分论证的流程进行实用”。

我们从来就不主张较大幅度的变革,而主张不断的改良,我们现在仍然要耐得住性子,谋定而后动。

“投标,合同签订,交付,开票,回款”是贯穿公司运作的主业务流,承载着公司主要的物流和资金流。针对这个主业务流的流程化组织建设和管理系统的建设,是我们长期的任务。

一个企业活的灵魂,就是坚持因地制宜实事求是:将这些造就我们成功的管理哲学的理念,用西方的方法规范,使之标准化、基线化,有利于广为传播与掌握并善用之。

2009年5月8日

Android中的AVD

Android 1.5中引入了AVD(Android Virtual Device)。AVD是一个经过配置的模拟器。在创建AVD时可以配置的选项有:模拟器影像大小/触摸屏/轨迹球/摄像头/屏幕分辨率/键盘/GSM/GPS/Audio录放/SD卡支持/缓存区大小等

任何一个android应用都必须运行在一个AVD。如果没有制定或自动找到合适的AVD,报如下类似错误:
Failed to find an AVD compatible with target 'Android 1.1'. Launch aborted.

AVD必须指定target,target有类型,SDK1.5中目前有两种:platform,Add-on。Platform是android的平台target,add-on是android的插件target。
在创建AVD,选择target时要注意:
1)target的API level很重要,应用的API Level要<=AVD的Target的API Level,否则应用不能运行。应用的API level在AndroidManifest.xml中定义。 2)最好建立一个API level最大的AVD,测试你的应用的在高版本AVD之上的兼容性。 3)如果你的应用使用了add-on插件(在manifest中声明了user-library),那么要部署到的AVD的target需要指定为add-on类型。否则会报如下错误: [2009-05-08 18:07:13 - apidemo_my] Installation error: INSTALL_FAILED_MISSING_SHARED_LIBRARY
[2009-05-08 18:07:13 - apidemo_my] Please check logcat output for more details.
[2009-05-08 18:07:13 - apidemo_my] Launch canceled!
(如果某个应用使用了两个add-on插件,那该如何创建AVD呢?好像创建AVD时没有依附于多个target的选项?)

现在SDK1.5有三个target,Android 1.1,Android 1.5,Google APIs,可以预见,随SDK的升级及add-on的扩展,会有新的target增加进来。可以通过android list target查看系统中有哪些target。怎样添加新的target呢?没有看到说明,可能要定制SDK才可以做到吧。

通过Eclipse ADT运行应用时,ADT缺省会自动找合适AVD作为模拟环境运行apk。也可以不让ADT自动找,而手工指定,方法就是在Run Configurations中设置,任意指定一个系统中存在的AVD(ADT会自动列出所有的AVD供选择)

引入了AVD后,做兼容性测试就比较容易了。可以根据需要创建多个AVD,每个AVD代表一种机型/版本。

2009年5月7日

PC通过Nokia E51上网

很多时候不在座位上,又找不到wifi上网。这时候就想起了如果能通过手机的GPRS/EDGE上网该多好,Google了一下,还真可以:
1)下载安装Nokia pc suite,我的E51没有中文版的pc suite,下载个英文版的也一样
2)开启PC和E51的蓝牙功能
3)启动Nokia pc suite,配置Nokia E51 Bluetooth Modem
4)PC suite上选择“Connect to internet"
5)One Touch Acess设置,Access Point设置为cmwap
6)连接网络,应用能够联通了,速度为115.2Kbps,EDGE的速度还是慢了点。
7)给IE/Firefox设置代理,代理服务器:10.0.0.172:80(IE要在拨号和虚拟专用网络中设置,而不是在局域网设置中设置)
8)可以正常上网了!

唯一的问题是访问google时,会自动跳到google的移动版,可能是google根据代理网关自动做了处理。

2009年5月5日

拥抱linux

一直以来桌面使用的都是windows。也曾想试下linux,但总有些担心linux会不会安装复杂,使用起来麻烦。直到昨天看了《开源世界旅行手册》--完全用GNU/Linux工作一文,了解到Linux Desktop版本已今非昔比了,是时候拥抱linux了。

昨晚回去下载了ubuntu9.04的cd,通过wubi安装,令人吃惊,整个安装比xp还要简单、快捷。我的Thinkpad T400的驱动竟然全部都自动识别出来了,比起当初安装XP费的那个牛劲,真是难以想象Linux的Desktop也如此强大了。

安装顺利结束,遇到的第一个问题,就是输入法/中文问题。由于以前从来没有用过Linux的Desktop,只通过了Teminal接触了Server的简单命令,这个问题很是搞了一上午(幸好有Google,再加上类XP的操作模式),终于将中文问题和输入法问题搞定了。这篇blog就是通过sunpinyin输入法完成的。

中间遇到最大的一个问题就是更新软件包。一开始不知道,选择语言后,系统提示下载软件包,但速度极慢,还老是fail。原来是系统缺省到ubuntu网站去下,后来通过google找到更换软件包下载源更新的方法,使用国内的lupaworld这个下载源,顺利将中文语言包更新。再找了个好用的sunpinyin输入法。

完全在linux环境下,听着“青花瓷”,使用sunpinyin,firefox写了这篇blog。

虽然还有很多命令还不知道,c语言也已经陌生,不要紧,先熟悉它,再掌握它!GNU/Linux,I am coming!

2009年5月4日

选择哪个Linux发行版

想在笔记本上装个Linux学习,看到如下的评论:

如果生产环境下的Server,目前RHEL和SLES无可争议;自己做一个小网站Debian是我的最爱;如果是Desktop,那么现在Ubuntu确实是最好;如果初学者想深入学习Linux,Gentoo会让你受益匪浅。

转:博士后和民工的区别

联合利华引进了一条香皂包装生产线,发现这条生产线有个缺陷:
常常会有盒子里没装入香皂。总不能把空盒子卖给顾客啊,他们只得请了一个学自动化的博士后设 计一个方案来分拣空的香皂盒。博士后拉起了一个十几人的科研攻关小组,综合采用了机械、微电子、自动化、X射线探测等技术,花了几十万美金,耗时三个半月 终于成功地解决了问题。每当生产线上有空香皂盒通过,两旁的探测器会检测到,并且驱动一只机械手把空皂盒推走。

中国南方有个乡镇企业也买了同样的生产线,老板发现这个问题后大为发火,找了个小工来说:你他妈给老子把这个搞定,不然你给老子滚蛋~。小工很快想出了办法:他在生产线旁边放了台风扇猛吹,空皂盒自然会被吹走。

WebView,WebViewClient,WebChromeClient

这三者有何关系?

在WebView的设计中,不是什么事都要WebView类干的,有些杂事是分给其他人的,这样WebView专心干好自己的解析、渲染工作就行了。WebViewClient就是帮助WebView处理各种通知、请求事件的,具体来说包括:

onLoadResource

onPageStart

onPageFinish

onReceiveError

onReceivedHttpAuthRequest



WebChromeClient是辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等



onCloseWindow(关闭WebView)

onCreateWindow()

onJsAlert (WebView上alert是弹不出来东西的,需要定制你的WebChromeClient处理弹出)

onJsPrompt

onJsConfirm

onProgressChanged

onReceivedIcon

onReceivedTitle

2009年4月29日

Android SDK1.5 R1发布

http://developer.android.com/sdk/RELEASENOTES.html

主要变化为:

1.SDK中包含了Android平台的多个版本(1.1,1.5),工具也升级了,这样可以发布应用到SDK支持的任何一个版本上。
2.引入了Android Virtual Devices(AVD),使之在模拟器上运行更接近于真机。每个AVD有自己的存储卡空间,使得更容易并发运行多个模拟器。
3.SDK支持add-on。这可以扩充SDK,使得可以访问多个外部Android库,能够在模拟器内运行定制的系统映像。(?)
4.新的ADT版本--0.9。增强了JUnit等有关功能
5.更容易的性能分析。
6.本地化资源管理更容易
7.新的"android"工具代替了activitycreator脚本

就API方面:

1.增加了AppWidget框架,这下widget也有了
2.增加了输入法框架
3.增加了语音识别框架
4.增强了多媒体框架:Audio的录/放API,Video的录像API,视频/照片的shareing intent等
5.增强了UI框架:
6.其他增强:重新设计的传感器API、WebView的增强等


从版本号也可看出,1.1-->1.5比起1.0-->1.1,功能增强还是较大的。但1.0-->1.1用了四个半月,1.1-->1.5只用了不到三个月。可看出Android逐步稳定,google要发力了!