精华内容
下载资源
问答
  • 体育场地画法的多媒体演示系统开发,陈强,易小坚,针对体育绘图课程传统教学方法的缺陷以及体育场地绘图技能学习资源的匮乏,利用flash研制了体育场地画法的多媒体演示系统。该系统�
  • 本文开发了一种基于3G网络的多媒体阅读业务系统,为了解决手机在处理能力方面的局限性,采用基于手机终端阅读软件/业务平台的系统方案。文章对手机阅读业务系统的架构、接口以及业务平台的功能模块进行了介绍,并对...
  • 在移动互联网科技高度发展的今天,多媒体播放技术...而在设备的众多功能中,多媒体技术无疑是其中最为耀眼的一个,为你讲解Android平台下的多媒体开发技术。  Android是一种以Linux为基础的开源码操作系统,Androi
        在移动互联网科技高度发展的今天,多媒体播放技术是唯一能与移动电话相竞争的现代技术。当今的移动智能设备不再是单纯的消息.电话设备,而已经成为了小型的智能通信设备,或者说,现在的移动智能设备已经是携带通信功能的小型计算机。而在设备的众多功能中,多媒体技术无疑是其中最为耀眼的一个,为你讲解Android平台下的多媒体开发技术。

     Android是一种以Linux为基础的开源码操作系统,Android开发平台的开放性,确保了它能够录制、播放各种不同形式的本地和流式多媒体文件。Android的多媒体系统为Android设备多媒体的开发和应用提供了非常好的平台。本节首先介绍。

     Android开发入门与实战之浅析Android多媒体系统架构

     Android多媒体系统架构可分为4层:Java应用组件层、Java应用程序框架层、系统运行库C语言Native层以及Linux内核驱动层

     1)Java应用组件层

     Android开发平台提供了3个不同的多媒体组件,具体如下。

     ·Camera——通过Camera,用户可在程序中照相或者录像。

     ·Media Recorder一包含Audio和video的记录功能。

     ·Media PlaVer一包含Audio和video的播放功能。

     2)Java应用程序框架

     Android平台提供了4个不同的Java组件编程接口:Camera、MediaRecorder、MediaPlayer和Surface。这4个编程接口,几乎可以实现Android系统所有的多媒体功能。

     Android.Hardware.Camera——提供对摄像机操作的编程接口。

     Android.Media.MediaRecorde广_在Android的界面上,Audio和Video两个应用程序都是调用MediaRecorder实现的。

     Android.Media.MediaPlayer——提供了在Android开发界面上播放Audio和Video两个应用程序的编程接口。

     Android.Ⅵew.Surface一被screen compositor管理的raw buffer句柄。

     3)系统运行库Native层

     Android系统运行库主要包括Camera硬件库、PacketVideo框架库和Surface库3部分,具体如下。

     Camera硬件库——提供了操作底层Camera硬件的C语言库。

     PacketVideo框架库——是多媒体库,基于PacketVideo OpenCore:支持多种常用音频、视频格式文件的录制和回放,编码格式包括MPEG4、MP3、H 264、AAC、ARM。

     ALSA Audio  又名高级Linux声音体系(Advanced Linux Sound Architecture)。是Linux内核中,为声卡提供的驱动组件,以替代原先的OSS(开放声音系统)。  一部分目的是支持声卡的自动配置,以及完美地处理系统中的多个声音设备,这些目的大多已达到。另一个声音框架JACK使用ALSA提供低延迟的专业级音频编辑和混音能力。

     Surface库——执行多个应用程序时,负责管理显示与存取操作间的互动,同时负责对2D绘图与3D绘图讲行显示合成。

     4)Linux内核驱动层

     该层提供了对硬件驱动的支持,包括摄像机、硬件编解码、音频/视频驱动等。

     上面主要介绍了多媒体系统的架构和功能,随着应用环境变得越来越复杂,Android开发框架处理逻辑的方式已经得到相当普遍的应用,Android开发者也得到普及技术深化。如果你也对Android开发有兴趣,欢迎加入扣丁学堂。
    框架
    展开全文
  • 如何使系统既具有数据库管理系统的优异性能,又具备多媒体系统的丰富多彩,是目前大家在探讨的一个问题。下面将作者开发航材多媒体数据库管理系统的点滴经验做一介绍。 1 航材多媒体信息管理系统的组成和开发 l.1...
  • 摘要:介绍了单机多媒体监控系统的软、硬件实现方法以及系统的功能等。着重描述了基于高速DSP芯片的系统各模块组成、原理及具体的设计方法。最后,从技术和社会效益角度对系统进行了展望。本系统具有广阔的应用...
  • 为了紧跟多媒体软件开发技术越来越强的脚步,本文提出了一种基于嵌入式系统的手机应用层多媒体软件的设计和系统开发。该系统的硬件部分的主要由一个单片机或微控制器(MCU)的处理器组成,软件部分则包括了所采用的...
  • Android 多媒体系统

    2019-09-23 13:48:24
    Android的多媒体系统为Android设备多媒体的开发和应用提供了非常好的平台。一、Android多媒体系统架构 Android的多媒体框架涉及到应用层、JAVA框架、C语言Native框架、硬件抽象层(驱动层)等环节。下面是Android的...

     Android系统能够录制、播放各种不同形式的本地和流式多媒体文件。Android的多媒体系统为Android设备多媒体的开发和应用提供了非常好的平台。

    一、Android多媒体系统架构

            Android的多媒体框架涉及到应用层、JAVA框架、C语言Native框架、硬件抽象层(驱动层)等环节。下面是Android的多媒体系统框架层次图。

           

                      图13-1  Android多媒体系统框架层次图


            从图中可以看出,Android多媒体系统架构又分为四层结构,分别是Java应用组件层、Java应用程序框架层、系统运行库C语言Native层以及Linux内核驱动层,下面按照从上到下的顺序分别介绍

            1)Java应用组件层

            Android平台提供了三个不同的多媒体功能。

            Camera:Android框架包含了对各种摄像机及其功能的在Android设备上的支持,它可以用户在其应用程序中捕获的照片和录像。
            Media Recorder:Android的MediaRecorder包含了Audio和video的记录功能。
            Media Player:Android的MediaPlayer包含了Audio和video的播放功能。

            2)Java应用程序框架层

            Android平台提供了四个不同的Java组件编程接口:Camera、MediaRecorder、MediaPlayer和Surface。这四个编程接口,几乎可以实现Android系统所有多媒体功能。

            Android.Hardware.Camera:该Java类提供了对摄像机操作的编程接口。
            Android.Media.MediaRecorder:该Java类提供了在Android的界面上,Audio和Video两个应用程序都是调用MediaRecorder实现的。
            Android.Media.MediaPlayer:该Java类提供了在Android的界面上播放Audio和Video两个应用程序的编程接口。
            Android.View.Surface:被screen compositor管理的raw buffer句柄。

            3)系统运行库Native层

            Android系统运行Native库层主要分为Camera硬件库、PacketVideo框架和Surface库三部分:

            Camera硬件库:提供了操作底层Camera硬件的C语言库。
            PacketVideo框架库:多媒体库,基于PacketVideo OpenCore;支持多种常用的音频、视频格式录制和回放,编码格式包括MPEG4、MP3、H 264、AAC、ARM。
            ALSA Audio:又名高级Linux声音体系(Advanced Linux Sound Architecture)。是Linux内核中,为声卡提供的驱动组件,以替代原先的OSS(开放声音系统)。 一部分的目的是支持声卡的自动配置,以及完美的处理系统中的多个声音设备,这些目的大多都已达到。另一个声音框架JACK使用ALSA提供低延迟的专业级音频编辑和混音能力。
            Android.View.Surface:执行多个应用程序时候,负责管理显示与存取操作间的互动,另外也负责2D绘图与3D绘图进行显示合成。

            4)Linux内核驱动层

            该层提供了对硬件驱动的支持,包括摄像机、硬件编解码、音频/视频驱动等。

    二、Android多媒体系统功能

            多媒体主要包括两方面的内容:音频视频的输入输出、编解码环节。

            其中,输入输出环节由其他方面的硬件抽象层实现,中间处理环节主要由PacketVideo实现,可以使用硬件加速。

            总的来说,Android的多媒体系统通过其开放平台,以强大的函数库支持,其功能包括如下内容:音频播放、视频播放、摄像功能、音频录制、视频录制。

    三、OpenCore简介

            OpenCore是Android多媒体系统的核心。与Android的其它程序库相比,OpenCore是一个基于C++代码实现的多媒体库,它定义了全功能的操作系统移植层,各种基本的功能均被封装成类的形式,各层次之间的接口多使用继承等方式。

            它主要包含了两大方面的内容:

            PVPlayer:提供媒体播放器的功能,完成各种音频(Audio)、视频(Video)流的回放(Playback)功能;
            PVAuthor:提供媒体流记录的功能,完成各种音频(Audio)、视频(Video)流的以及静态图像捕获功能;

            PVPlayer和PVAuthor以SDK的形式提供给开发者,可以在这个SDK之上构建多种应用程序和服务。

    四、OpenMAX简介

            OpenMax是一个多媒体应用程序的框架标准。其中,OpenMax IL(集成层)技术规格定义了媒体组件接口,以便在嵌入式器件的流媒体框架中快速集成加速编解码器。

            OpenMax分成三个层次,自上而下分别是,OpenMax DL(开发层),OpenMax IL(集成层)和OpenMax AL(应用层)。三个层次的内容分别如下所示。

            第一层:OpenMax DL(Development Layer,开发层)

            OpenMax DL定义了一个API,它是音频、视频和图像功能的集合。硅供应商能够在一个新的处理器上实现并优化,然后编解码供应商使用它来编写更广泛的编解码器功 能。它包括音频信号的处理功能,如FFT和filter,图像原始处理,如颜色空间转换、视频原始处理,以实现例如MPEG-4、H.264、MP3、 AAC和JPEG等编解码器的优化。

            第二层:OpenMax IL(Integration Layer,集成层)

            OpenMax IL作为音频、视频和图像编解码器能与多媒体编解码器交互,并以统一的行为支持组件(例如,资源和皮肤)。这些编解码器或许是软硬件的混合体,对用户是透 明的底层接口应用于嵌入式、移动设备。它提供了应用程序和媒体框架,透明的。S编解码器供应商必须写私有的或者封闭的接口,集成进移动设备。IL的主要目 的是使用特征集合为编解码器提供一个系统抽象,为解决多个不同媒体系统之间轻便性的问题。

            第三层:OpenMax AL(Appliction Layer,应用层)

            OpenMax AL API在应用程序和多媒体中间件之间提供了一个标准化接口,多媒体中间件提供服务以实现被期待的API功能。

     

    转载于:https://www.cnblogs.com/fuyunmomo/p/4281039.html

    展开全文
  • 摘要: 首先介绍并分析Android 系统的层次架构,并在此基础上介绍Android 应用程序开发的相关技术和基本的开发流程。接下来介绍Android 提供的多媒体开发组件。最后用具体的应用程序---播放器简要说明Android 多媒体...
  • 环境变量 环境变量 说明 $HOME 用户的主目录 $IFS 内部的域分隔符一般为空格符制表符或换行符 $PATH 寻找命令或可执行文件的搜索路径列表路径以冒号分隔 $PS1 主命令提示符默认为$ $PS2 从命令提示符默认为> $TERM ...
  • 1. 多媒体开发详解 知识准备 第一层OpenMax DL(Development Layer开发层) OpenMax DL定义了一个API它是音频视频和图像功能的集合硅供应商能够在一个新的处理器上实现并优化然后编解码供应商使用它来编写更广泛的编...
  • 城市多媒体电子地图系统是一种以可视化的数字地图为索引,结合文字、图片、声音、动画、视频等多媒体手段来展示城市、企业、旅游景点等区域综合面貌的现代信息产品,它是地理信息技术在城市信息化建设中的一种全新...
  • 本文由中文?word?文档库?搜集整理中文?word?文档库免费提 供海量教学资料行业资料...系统的研究与开发 抚?顺?石?油?学?院 计算机科学与技术系 基础教学部 魏海平?邱继英?温 涛?纪玉波 佟 义 第一章 前言 我国的?CAICom
  • 多媒体数据库应用系统开发

    千次阅读 2006-03-03 09:58:00
    一般来说,图像、声音、数字音频是多媒体的基本要素,目前多媒体数据库的应用日益...多媒体应用的开发技术,是一个涉及多方面的综合技术。例如,有线电视实时颠簸系统不仅涉及语音卡、电话网、有线电视网、数据库、高级
    一般来说,图像、声音、数字音频是多媒体的基本要素,目前多媒体数据库的应用日益广泛。例如,城市交互式有线电视实时点歌系统,使人们可以通过电话机按键点歌,并且同时在电视上看到自己正在操纵的菜单,选中歌曲后电视立即自动播放MTV,不需旁人的帮助,这是网络多媒体数据库的具体应用。
    多媒体应用的开发技术,是一个涉及多方面的综合技术。例如,有线电视实时颠簸系统不仅涉及语音卡、电话网、有线电视网、数据库、高级语言编程等多方面的技术,还要解决节目来源、版权等多方面的问题。
    开发多媒体数据库应用系统可以采用PowerBuilder、VB、Delphi、Visual C++等工具,数据库可根据应用的需要采用SQL Server、DB2、Access等。多媒体数据库应用系统的程序一般要具备多媒体录制、查询、播放等众多功能。
    开发过程一般要注意以下事项:
    (1)系统统筹、设计、资源的数字化;
    (2)将图像(静态、动态)、声音、东化、文子等多媒体素材存入数据库;
    (3)制作查询,播放功能模块;
    (4)设计、开发应用硬件平台,比如应用在银行等系统的ATM、CDM、查询终端等。
    目前多媒体数据库在各行各业都由应用,例如珍稀动植物多媒体数据库等。
    展开全文
  • 多媒体应用开发

    2020-06-02 09:22:09
    Android作为手机和平板电脑的一个操作系统,对于多媒体应用也提供了良好的支持。它不仅支持音频和视频的播放,而且还支持 音频录制和摄像头拍照。 播放音频与视频 Android提供了对常用音频和视频格式的支持,它所...

    Android作为手机和平板电脑的一个操作系统,对于多媒体应用也提供了良好的支持。它不仅支持音频和视频的播放,而且还支持 音频录制和摄像头拍照。

    播放音频与视频

    Android提供了对常用音频和视频格式的支持,它所支持的音频格式有MP3(.mp3)、3GPP(.3gp)、Ogg(.ogg)和WAVE(.ave)等,支持的视频格式有3GPP(.3gp)和MPEG-4(.mp4)等。通过Android API提供的相关方法,在Android中可以实现音频与视频的播放。

    使用MediaPlayer播放音频

    在Android中,提供了MediaPlayer类来播放音频。使用MediaPlayer类播放音频比较简单,只需要创建该类的对象,并为其指定要播放的音频文件,然后调用该类的start()方法即可

    1. 创建MediaPlayer对象,并装载音频文件
      创建MediaPlayer对象并装载音频文件,可以使用MediaPayer类提供的静态方法create()来实现,也可以通过其无参构造方法来创建并实例化该类的对象来实现。 MediaPlayer类的静态方法create()常用的语法格式有以下两种。

    [√]create(Contextcontext, int resid) 用于从资源ID所对应的资源文件中装载音频,并返回新创建的MediaPlayer对象。例如,要创建装载音频资源(res/raw/d.wav)的MediaPlayer对象,可以使用下面的代码:

    MediaPlayer player=MediaPlayer.create(this, R.raw.d);
    

    [√]create(Contextcontext, Uri uri)
    用于根据指定的URI来装载音频,并返回新创建的MediaPlayer对象。例如,要创建装载了音频文件(URI地址为http://www.baidu.com/sound/bg.mp3)的MediaPlayer对象,可以使用下面的代码:

    MediaPlayer player=MediaPlayer.create(this, Uri.parse("http://www.baidu.com/sound/bg.mp3"));
    

    说明:在访问网络中的资源时,要在AndroidManifest.xml文件中授予该程序访问网络的权限,具体的授权代码如下:

    <uses-permission android:name="android.permission.INTERNET"/>
    

    在通过MediaPlayer类的静态方法create()来创建MediaPlayer对象时,已经装载了要播放的音频,而使用无参的构造方法来创建MediaPlayer对象时,需要单独指定要装载的资源,这可以使用 MediaPlayer类的setDataSource()方法实现。

    在使用setDataSource()方法装载音频文件后,实际上MediaPlayer并未真正装载该音频文件,还需要调用MediaPlayer的prepare()方法去真正装载音频文件。使用无参的构造方法来创建MediaPlayer 对象并装载指定的音频文件,可以使用下面的代码:

    MediaPlayer player=new MediaPlayer(); 
    try {
    	player.setDataSource("/sdcard/s.wav"); //指定要装的音频文件 
    } catch (IllegalArgumentException e1) { 
    	e1.printStackTrace(); 
    } catch (SecurityException e1) { 
    	e1.printStackTrace(); 
    } catch (IllegalStateException e1) { 
    	e1.printStackTrace(); 
    } catch (IOException e1) { 
    	e1.printStackTrace(); 
    }
    	
    try { 
    	player.prepare(); //预加载音频
    } catch (IllegalStateException e) { 
    	e.printStackTrace(); 
    } catch (IOException e) { 
    	e.printStackTrace(); 
    }
    
    1. 开始或恢复播放

    在获取到MediaPlayer对象后,就可以使用MediaPlayer类提供的start()方法来开始播放或恢复已经暂停的音频的播放。例如,已经创建了一个名称为player的对象,并且装载了要播放的音频,可 以使用下面的代码播放该音频:

    player.start(); //开始播放
    
    1. 停止播放
      使用MediaPlayer类提供的stop()方法可以停止正在播放的音频。例如,已经创建了一个名称为player的对象,并且已经开始播放装载的音频,可以使用下面的代码停止播放该音频:
    player.stop(); //停止播放
    
    1. 暂停播放
      使用MediaPlayer类提供的pause()方法可以暂停正在播放的音频。例如,已经创建了一个名称为player的对象,并且已经开始播放装载的音频,可以使用下面的代码暂停播放该音频:
    player.pause(); //暂停播放
    

    使用SoundPool播放音频

    由于MediaPlayer占用资源较多,且不支持同时播放多个音频,所以Android还提供了另一个播放音频的类——SoundPool。SoundPool即音频池,可以同时播放多个短小的音频,而且占用的资源 较少。SoundPool适合在应用程序中播放按键音或者消息提示音等,在游戏中播放密集而短暂的声音,如多个飞机的爆炸声等。使用SoundPool播放音频,首先需要创建SoundPool对象,然后加载所 要播放的音频,最后调用play()方法播放音频,下面进行详细介绍。

    1. 创建SoundPool对象
      SoundPool类提供了一个构造方法,用来创建SoundPool对象,该构造方法的语法格式如下:
    SoundPool (int maxStreams, int streamType, int srcQuality)
    

    中,参数maxStreams用于指定可以容纳多少个音频;参数streamType用于指定声音类型,可以通过AudioManager类提供的常量进行指定,通常使用STREAM_MUSIC;参数srcQuality用于指定音 频的品质,默认值为0。

    例如,创建一个可以容纳10个

    SoundPool soundpool = new SoundPool(10, AudioManager.STREAM_SYSTEM, 0); //创建一个SoundPool对象,该对象可以容纳10个音频流
    
    1. 加载所要播放的的音频

    创建SoundPool对象后,可以调用load()方法来加载要播放的音频。load()方法的语法格式有以下4种。
    [√]publicint load (Contextcontext, int resId, int priority):用于通过指定的资源ID来加载音频。
    [√]publicint load (String path, int priority):用于通过音频文件的路径来加载音频。
    [√]publicint load (AssetFileDescriptorafd, int priority):用于从AssetFileDescriptor所对应的文件中加载音频。
    [√]publicint load (FileDescriptor fd, long offset, long length, int priority):用于加载FileDescriptor对象中从offset开始,长度为length的音频。

    例如,要通过资源ID来加载音频文件ding.wav,可以使用下面的代码:

    soundpool.load(this, R.raw.ding , 1);
    

    说明: 为了更好地管理所加载的每个音频,一般使用HashMap<Integer, Integer>对象来管理这些音频。这时可以先创建一个HashMap<Integer, Integer>对象,然后应用该对象的put()方法将加载的音 频保存到该对象中。例如,创建一个HashMap<Integer, Integer>对象,并应用put()方法添加一个音频,可以使用下面的代码:

    HashMap<Integer, Integer> soundmap = new HashMap<Integer, Integer>(); //创建一个HashMap对象 
    soundmap.put(1, soundpool.load(this, R.raw.chimes, 1));
    
    1. 播放音频
      调用SoundPool对象的play()方法可播放指定的音频。play()方法的语法格式如下:
    play (int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)
    

    play()方法各参数的说明

    参数 描述
    soundID 用于指定要播放的音频,该音频为通过load()方法返回的音频
    leftVolume 用于指定左声道的音量,取值范例为0.0~1.0
    rightVolume 用于指定右声道的音量,取值范例为0.0~1.0
    priority 用于指定播放音频的优先级,数值越大,优先级越高
    loop 用于指定循环次数,0为不循环,-1为循环
    rate 用于指定速率,正常为1,最低为0.5,最高为2

    使用VideoView播放视频

    在Android中,提供了VideoView组件用于播放视频文件。要想使用VideoView组件播放视频,首先需要在布局文件中创建该组件,然后在Activity中获取该组件,并应用其setVideoPath()方法或 setVideoURI()方法加载要播放的视频,最后调用start()方法来播放视频。另外,VideoView组件还提供了stop()和pause()方法,用于停止或暂停视频的播放。

    在布局文件中创建VideoView组件的基本语法格式如下:

    <VideoView 属性列表> </VideoView>
    

    VideoView组件支持的XML属性
    XML属性 描述
    android:id 用于设置组件的ID
    android:background 用于设置背景,可以设置背景图片,也可以设置背景颜色
    android:layout_gravity 用于设置对齐方式
    android:layout_width 用于设置宽度
    android:layout_height 用于设置高度

    在Android中还提供了一个可以与VideoView组件结合使用的MediaController组件。MediaController组件用于通过图形控制界面来控制视频的播放。

    下面通过一个具体的实例来说明如何使用VideoView和MediaController来播放视频。

    <VideoView android:id="@+id/video" 
    	android:background="@drawable/mpbackground" 
    	android:layout_width="match_parent" 
    	android:layout_height="wrap_content" 
    	android:layout_gravity="center" />
    

    (2)打开默认添加的MainActivity,在该类中,声明一个VideoView对象,具体代码如下:

    private VideoView video; //声明VideoView对象
    

    (3)在onCreate()方法中,首先获取布局管理器中添加的VideoView组件,并创建一个要播放视频所对应的File对象,然后创建一个MediaController对象,用于控制视频的播放,最后判断要播放的 视频文件是否存在,如果存在,使用VideoView播放该视频,否则弹出消息提示框显示提示信息,具体代码如下:

    video=(VideoView) findViewById(R.id.video); //获取VideoView组件 
    File file=new File("/sdcard/bell.mp4"); //获取SD卡上要播放的文件 
    MediaController mc=new MediaController(MainActivity.this); 
    if(file.exists()){ //判断要播放的视频文件是否存在 
    	video.setVideoPath(file.getAbsolutePath()); //指定要播放的视频 
    	video.setMediaController(mc); //设置VideoView与MediaController相关联 
    	video.requestFocus(); //让VideoView获得焦点 
    	
    	try {
    		video.start(); //开始播放视频 
    	} catch (Exception e) { 
    		e.printStackTrace(); //输出异常信息 
    	}
    	
    	//为VideoView添加完成事件监听器 
    	video.setOnCompletionListener(new OnCompletionListener() { 
    		@Override
    		public void onCompletion(MediaPlayer mp) { 
    			//弹出消息提示框显示播放完毕 
    			Toast.makeText(MainActivity.this, "视频播放完毕!", Toast.LENGTH_SHORT).show(); 
    		} 
    	}); 
    }else{ 
    	//弹出消息提示框提示文件不存在 
    	Toast.makeText(this, "要播放的视频文件不存在", Toast.LENGTH_SHORT).show(); 
    }
    

    说明:由于本实例是在模拟器上运行的,所以并没有显示视频画面,而在屏幕中间显示的图片是为VideoView设置的背景图片。如果将该程序发布到真机上运行,就可以看到视频画面了。

    使用MediaPlayer和SurfaceView播放视频

    使用MediaPlayer除可以播放音频外,还可以播放视频文件,只不过使用MediaPlayer播放视频时,没有提供图像输出界面。这时,可以使用SurfaceView组件来显示视频图像。使用MediaPlayer和 SurfaceView来播放视频,大致可以分为以下4个步骤。

    (1)定义SurfaceView组件。定义SurfaceView组件可以在布局管理器中实现,也可以直接在Java代码中创建,不过推荐在布局管理器中定义SurfaceView组件,其基本语法格式如下:

    <SurfaceView android:id="@+id/ID号"
    	android:background="背景" 
    	android:keepScreenOn="true|false" 
    	android:layout_width="宽度" 
    	android:layout_height="高度"/>
    

    在上面的语法中,android:keepScreenOn属性用于指定在播放视频时,是否打开屏幕。

    例如,在布局管理器中,添加一个ID号为surfaceView1、设置了背景的SurfaceView组件,可以使用下面的代码:

    <SurfaceView android:id="@+id/surfaceView1" 
    	android:background="@drawable/bg" 
    	android:keepScreenOn="true" 
    	android:layout_width="576px" 
    	android:layout_height="432px"/>
    

    (2)创建MediaPlayer对象,并为其加载要播放的视频。与播放音频时创建MediaPlayer对象一样,也可以使用MediaPlayer类的静态方法create()和无参的构造方法两种方式创建MediaPlayer对象。

    (3)将所播放的视频画面输出到SurfaceView。使用MediaPlayer对象的setDisplay()方法,可以将所播放的视频画面输出到SurfaceView。setDisplay()方法的语法格式如下:

    setDisplay(SurfaceHolder sh)
    

    参数sh用于指定SurfaceHolder对象,可以通过SurfaceView对象的getHolder()方法获得。例如,为MediaPlayer对象指定输出视频画面的SurfaceView,可以使用下面的代码:

    mediaplayer.setDisplay(surfaceview.getHolder()); //设置将视频画面输出到SurfaceView
    

    (4)调用MediaPlayer对象的相应方法控制视频的播放。使用MediaPlayer对象提供的play()、pause()和stop()方法,可以控制视频的播放、暂停和停止。

    控制相机拍照

    现在的手机和平板电脑一般都会提供相机功能,而且相机功能的应用越来越广泛。在Android中提供了专门用于处理相机相关事件的类,即android.hardware包中的Camera类。Camera类没有构造 方法,可以通过其提供的open()方法打开相机。打开相机后,可以通过Camera.Parameters类处理相机的拍照参数。拍照参数设置完成后,可以调用startPreview()方法预览拍照画面,也可以调用 takePicture()方法进行拍照。结束程序时,可以调用Camera类的stopPreview()方法结束预览,并调用release()方法释放相机资源。Camera类常用的方法如表所示。

    方法 描述
    getParameters() 用于获取相机参数
    Camera.open() 用于打开相机
    release() 用于释放相机资源
    setParameters(Camera.Parameters params) 用于设置相机的拍照参数
    setPreviewDisplay(SurfaceHolder holder) 用于为相机指定一个用来显示相机预览画面的SurfaceView
    startPreview() 用于开始预览画面
    takePicture(Camera.ShutterCallback shutter, Camera.PictureCallback raw, Camera.PictureCallback jpeg) 用于进行拍照
    stopPreview() 用于停止预览

    实现控制相机拍照功能。
    (1)新建项目的res\layout目录下的布局文件main35.xml,将默认添加的TextView组件删除,并将默认添加的垂直线性布局管理器修改为水平线性布局管理器,然后在该布局管理器中添加一个 垂直线性布局管理器(用于放置控制按钮)和一个SurfaceView组件(用于显示相机预览画面),再在这个垂直线性布局管理器中添加两个按钮:一个是“预览”按钮,id为preview;另一个是“拍照”按 钮,id为takephoto。关键代码如下:

    <SurfaceView android:id="@+id/surfaceView1" 
    	android:layout_width="match_parent" 
    	android:layout_height="match_parent" />
    

    (2)打开默认添加的MainActivity,在该类中,声明程序中所需的成员变量,具体代码如下:

    private Camera camera; //相机对象 
    private boolean isPreview = false; //是否为预览模式
    

    (3)设置程序为全屏运行。这里需要将下面的代码添加到onCreate()方法中默认添加的setContentView(R.layout.main35);语句之前,否则不能应用全屏的效果。

    requestWindowFeature(Window.FEATURE_NO_TITLE); //设置全屏显示
    

    (4)在onCreate()方法中,首先判断是否安装SD卡,因为拍摄的图片需要保存到SD卡上,然后获取用于显示相机预览画面的SurfaceView组件,最后通过SurfaceView对象获取SurfaceHolder对象, 并设置该SurfaceHolder不维护缓冲,具体代码如下:

    /****************** 判断是否安装SD卡 *********************************/ 
    if (!android.os.Environment.getExternalStorageState().equals( android.os.Environment.MEDIA_MOUNTED)) { 
    	Toast.makeText(this, "请安装SD卡!", Toast.LENGTH_SHORT).show(); //弹出消息提示框显示提示信息
    }
    /******************************************************************/ 
    SurfaceView sv = (SurfaceView) findViewById(R.id.surfaceView1); //获取SurfaceView组件,用于显示相机预览 
    final SurfaceHolder sh = sv.getHolder(); //获取SurfaceHolder对象 
    sh.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); //设置该SurfaceHolder不维护缓冲
    

    (5)获取布局管理器中添加的“预览”按钮,并为其添加单击事件监听器,在重写的onClick()方法中,首先判断相机是否为预览模式,如果不是,则打开相机,然后为相机设置显示预览画面的 SurfaceView,并设置相机参数,最后开始预览并设置自动对焦,具体代码如下:

    Button preview = (Button) findViewById(R.id.preview); //获取“预览”按钮 
    preview.setOnClickListener(new View.OnClickListener() { 
    	@Override 
    	public void onClick(View v) { 
    		//如果相机为非预览模式,则打开相机 
    		if (!isPreview) { 
    			camera=Camera.open(); //打开相机 
    		}
    		
    		try {
    			camera.setPreviewDisplay(sh); //设置用于显示预览的SurfaceView 
    			Camera.Parameters parameters = camera.getParameters(); //获取相机参数 
    			parameters.setPictureSize(640, 480); //设置预览画面的尺寸 
    			parameters.setPictureFormat(PixelFormat.JPEG); //指定图片为JPEG格式 
    			parameters.set("jpeg-quality", 80); //设置图片的质量 
    			parameters.setPictureSize(640, 480); //设置拍摄图片的尺寸 
    			camera.setParameters(parameters); //重新设置相机参数 
    			camera.startPreview(); //开始预览 
    			camera.autoFocus(null); //设置自动对焦 
    		} catch (IOException e) { 
    			e.printStackTrace(); 
    		} 
    	} 
    });
    

    (6)获取布局管理器中添加的“拍照”按钮,并为其设置单击事件监听器,在重写的onClick()方法中,如果相机对象不为空,则调用takePicture()方法进行拍照,具体代码如下:

    Button takePhoto = (Button) findViewById(R.id.takephoto); //获取“拍照”按钮 
    takePhoto.setOnClickListener(new View.OnClickListener() { 
    	@Override 
    	public void onClick(View v) { 
    		if(camera!=null){ 
    			camera.takePicture(null, null, jpeg); //进行拍照 
    		} 
    	} 
    });
    

    (7)实现拍照的回调接口,在重写的onPictureTaken()方法中,首先根据拍照所得的数据创建位图,然后实现一个带“保存”和“取消”按钮的对话框,用于保存所拍图片,具体代码如下:

    final PictureCallback jpeg = new PictureCallback() { 
    	@Override 
    	public void onPictureTaken(byte[] data, Camera camera) { 
    		//根据拍照所得的数据创建位图 
    		final Bitmap bm = BitmapFactory.decodeByteArray(data, 0,data.length);
    		//加载layout/save.xml文件对应的布局资源 、
    		View saveView = getLayoutInflater().inflate(R.layout.save, null); 
    		final EditText photoName = (EditText) saveView.findViewById(R.id.phone_name); 
    		//获取对话框上的ImageView组件 
    		ImageView show = (ImageView) saveView.findViewById(R.id.show); 
    		show.setImageBitmap(bm); //显示刚刚拍得的照片 
    		camera.stopPreview(); //停止预览 
    		isPreview = false; //使用对话框显示saveDialog组件 
    		
    		new AlertDialog.Builder(MainActivity.this).setView(saveView) 
    			.setPositiveButton("保存", new DialogInterface.OnClickListener() { 
    				@Override 
    				public void onClick(DialogInterface dialog, int which) { 
    					File file = new File("/sdcard/pictures/" + photoName .getText().toString() + ".jpg"); //创建文件对象 
    					
    					try { 
    						file.createNewFile(); //创建一个新文件 //创建一个文件输出流对象 
    						FileOutputStream fileOS = new FileOutputStream(file); //将图片内容压缩为JPEG格式输出到输出流对象中 bm.compress(Bitmap.CompressFormat.JPEG, 100, fileOS); 
    						fileOS.flush(); //将缓冲区中的数据全部写出到输出流中 
    						fileOS.close(); //关闭文件输出流对象 
    						isPreview = true; 
    						resetCamera(); 
    					} catch (IOException e) { 
    						e.printStackTrace(); 
    					} 
    				} 
    			}).setNegativeButton("取消", new DialogInterface.OnClickListener() { 
    				public void onClick(DialogInterface dialog, int which) { 
    					isPreview = true; resetCamera(); //重新预览 
    				} 
    			}).show(); 
    		} 
    	};
    

    (8)编写保存对话框所需要的布局文件,名称为save.xml,在该文件中,添加一个垂直线性布局管理器,并在该布局管理器中添加一个水平线性布局管理器(用于添加输入相片名称的文本框和 编辑框)和一个ImageView组件(用于显示相片预览),具体代码请参见光盘。

    (9)编写实现重新预览的方法resetCamera(),在该方法中,当isPreview变量的值为真时,调用相机的startPreview()方法开启预览,具体代码如下:

    private void resetCamera(){ 
    	if(isPreview){ 
    		camera.startPreview(); //开启预览 
    	} 
    }
    

    (10)重写Activity的onPause()方法,用于当暂停Activity时,停止预览并释放相机资源,具体代码如下:

    @Override 
    protected void onPause() { 
    	if(camera!=null){ 
    		camera.stopPreview(); //停止预览 
    		camera.release(); //释放资源 
    	}
    	
    	super.onPause(); 
    }
    

    (11)由于本程序需要访问SD卡和控制相机,所以需要在AndroidManifest.xml文件中赋予程序访问SD卡和控制相机的权限,关键代码如下:

    <!-- 授予程序可以向SD卡中保存文件的权限 --> 
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
    <!-- 授予程序使用摄像头的权限 --> 
    <uses-permission android:name="android.permission.CAMERA" /> 
    <uses-feature android:name="android.hardware.camera" /> 
    <uses-feature android:name="android.hardware.camera.autofocus" />
    
    展开全文
  • 最近在开发多媒体问答系统,服务器端基本架构是mongodb+Spring+jerseyRest+Spring-data+java+maven3.0 客户端采用android+IOS两种方按。我负责服务器端和android端,本文将自己附上整个服务器配置过程中的BUG及其...
  • 应用Flash开发图书馆多媒体触摸屏导航系统
  • 用PB开发多媒体数据库管理系统 (加入日期:2001-6-9) 【保存文章至硬盘】【打印文章】【字体:大中 小】 分享到: 0 图像、声音、数字视频是多媒体的基本要素,目前多媒体数据库正得到是益广泛的应用。...
  • 一对一直播系统开发多媒体图片压缩工具类相关的代码 public class MediaUtils { private MediaUtils() { throw new UnsupportedOperationException("cannot be instantiated"); } /** * @param bMute 值...
  • 多媒体预约管理系统,VB结合Access开发完成,功能大致分为三大块:登记、查询、统计,对教案、教室、年级、课程进行登记,为预约课程做准备,程序相对简单,界面也简洁,没有过多修饰,对VB新手友好。 烈火下载友情...
  • 智能多媒体互动投影系统将会对智能多媒体带来革命性的改变,该系统采用嵌入式的激光投影技术、红外图像的采集、目标与背景的分离、目标识别、目标跟踪控制、信息转换,嵌入在中间件中,投射出虚拟键盘图,连着PC端,装上...
  • 1.2多媒体系统的组成

    千次阅读 2017-09-19 22:16:03
    1.多媒体系统定义: 能对文本、音频、图形、图像、动画和视频等多媒体信息进行逻辑的互连、获取、编辑、存储和播放的一种具有交互性的计算机系统。 多媒体系统是一种硬件与软件相结合的复杂系统   2.多媒体系统的...
  • 首先介绍并分析Android系统的层次架构,并在此基础上介绍Android应用程序开发的相关技术和基本的开发流程。接下来介绍Android提供的多媒体开发组件。最后用具体的应用程序---播放器简要说明Android多媒体应用程序的...
  • 节:  为什么说 Android 将会占据手机操作系统的市场:  从代"大哥大"算起,手机的功能千变万化,从单一的接打电话发展到拍照、听音乐、手机报、游戏等功能。进入新世纪,智能手机开始... --为Android 系统开发
  • 在基于Internet基础上,结合ASP,ADO和...根据实验教学的要求,系统分为教师管理和学生实验两个主要功能部分,实现了多媒体教学实例运行演示、网上实验,以及基于网络数据库的实验报告书生成和教师批改报告等功能。
  • Android 手机多媒体程序开发教程 第一节 为什么说Android 将会占据手机操作系统的市场 从第一代大哥大算起手机的功能千变万化从单一的接打电话发展到拍照听音乐 手机报游戏等功能进入新世纪智能手机开始出现所谓智能...
  • 全书分为17章,分别详细讲解了Android系统基础,深入底层基础,多媒体框架,音频系统框架,视频系统框架,Camera照相机系统,振动器系统和警报系统,2D应用开发,渲染二维图像,OpenGL ES基础,OpenGL ES实战技术,...
  • AnyShow 采用用WPF技术开发系统中只要安装了.net4,即可无需安装,直接使用,设计好系统后,可以直接拷贝到其电脑上运行。 用户只要准备好普通的素材,包括图片(png,jpg,bmp,动画gif),视频(wmv,avi,asf,mp4,mpg...
  • 意法半导体近日扩大了Nomadik多媒体应用处理器的生态系统,在STn8815 Nomadik引擎内集成Linux操作系统和Trolltech公司的Qtopia应用开发环境。  这个性能强大的平台为设备制造商提供了一个完整的参考设计,有助于...
  • Android MediaPlayer多媒体系统框架

    千次阅读 2018-06-15 17:05:38
    1.Android MediaPlayer多媒体视频系统框架简介Mediaplayer是Android系统中最为复杂的媒体播放器, MediaPlayer既可以播放本地的视音频流也可以播放网络的视音频流,Android系统中将Mediaplayer播放器封装成了一个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,813
精华内容 1,125
关键字:

多媒体系统开发