精华内容
下载资源
问答
  • 1.3.8 多媒体计算机 23 1.4 存储程序计算机 24 1.4.1 问题描述 24 1.4.2 解决方法 24 1.4.3 构造一算法 26 1.4.4 计算机需要通过什么来解决问题 27 1.4.5 存储器 29 1.5 存储程序的概念 31 1.6 计算机系统概览 35 ...
  • 微型计算机的基本结构由哪几部分构成主机主要包括了哪些部 件 答微机的硬件主要由主机和外设两部分构成 主机主要包括了主机板主要有 CPU和内存各类驱动器电源 各类适配器等 2微机的发展方向是什么 答以下五方向 ...
  • 1.计算机网络是一十分复杂的系统,涉及计算机技术、通信技术、多媒体技术等多领域。系统中的各个部分必须遵守一整套合理而严谨的结构化管理规则。计算机网络就是按照高度结构化的设计思想,采用功能分层原理的...

    零.简介

    1.计算机网络是一个十分复杂的系统,涉及计算机技术、通信技术、多媒体技术等多个领域。系统中的各个部分必须遵守一整套合理而严谨的结构化管理规则。计算机网络就是按照高度结构化的设计思想,采用功能分层原理的方法来实现的。

     

    一.网络体系结构与协议概述

    1.网络体系结构的概念:体系结构是研究系统各部分组成及相互关系的技术科学。计算机网络体系结构是指整个网络系统的逻辑组成和功能分配(层),定义和描述了一组用于计算机及其通信设施之间互联的标准和规范的集合(协议)。研究计算机网络体系结构的目的在于定义计算机网络各个组成部分的功能,以便在统一原则的指导下进行计算机网络的涉及、建造、使用和发展。

    2.网络协议的概念:网络协议是为进行网络中的数据通信或数据交换而建立的规则、标准或约定。连网的计算机以及网络设备之间要进行数据与控制信息的成功传递就必须共同遵守网络协议。网络协议主要由以下3个要素组成,即语法、语义、时序。

    (1).语法:规定通信双方“如何讲”,即确定用户数据与控制信息的结构与格式。

    (2).语义:规定通信双方准备“讲什么”,即需要发出何种控制信息,完成何种动作以及作出何种应答。

    (3).时序:规定了双方“何时进行通信”,即事件实现顺序的详细说明。

    3.网络协议的分层:计算机网络是一个非常复杂的系统,因此网络通信也比较复杂。网络通信的涉及面极广,所以用于网络通信的协议必然很多。结构化设计方法是解决复杂问题的一种有效手段,其核心思想就是将系统模块化,并按层次组织各模块。

    4.分层的好处:各层之间可相互独立。每一层都有一个清晰、明确的任务,实现相对独立的功能,因而可以将复杂的系统性问题分解为一层一层的小问题。

    (1).灵活性好,易于实现和维护。当任何一层发生变化时,只要层间接口保持不变,则其它各层不会受到影响。

    (2).有利于促进标准化。因为每一层的协议已经对该层的功能与所提供的服务做了明确的说明。

    5.各层次间的关系:网络协议都是按层的方式来组织,每一层都能完成一组特定的、有明确含义的功能,每一层的目的都是向上一层提供一定的服务,而上一层不需要知道下一层是如何实现服务的。每一对相邻层次之间都有一个接口,接口定义了下层向上层提供的命令和服务,相邻两个层次都是通过接口来交换数据的。每⼀层中的活动元素通常称为实体。实体既可以是软件实体(如⼀个进程),也可以是硬件实体(如智能输⼊/输出芯⽚)。不同通信节点上的同⼀层实体称为对等实体。在计算机⽹络中,对等实体利⽤该层的协议进⾏通信。但是在实际的通信过程中,每⼀层都把数据和控制信息交给下⼀层,直到第1层。第1层下⾯是是物理传输介质,进⾏实际的数据传输。

    6.其它相关概念:

    (1).服务:服务位于层次接口的位置,表示底层为上层提供哪些操作功能。至于这些功能是如何实现的,完全不是服务考虑的范畴。服务分为面向连接服务和无连接服务。面向连接服务的提供者要进行建立连接、维护连接和拆除连接的工作,这种服务最大的好处就是能够保证数据高速、可靠和顺序的传输。无连接服务不需要维护连接的额外开销,但是可靠性较低,也不能保证数据的顺序传输。

    (2).服务访问点(SAP):服务访问点是相邻两层实体之间通过接口调用服务或提供服务的联系点。

    (3).协议数据单元(PDU):是对等实体之间通过协议传送的数据单元。

    (4).接口数据单元(IDU):是相邻层次之间通过接口传送的数据单元,?️称为服务数据单元(SDU)。

     

    二.OSI参考模型

    1.OSI参考模型的概念;

    (1).1984年,国际标准化组织ISO发表了著名的ISO/IEC 7498标准,定义了网络互联的7层框架,这就是开放系统互联参考模型,即ISO/OSI RM。只要遵循OSI标准,一个系统就可以与世界上任何地方、同样遵守OSI标准的其他任何系统进行通信。

    (2).OSI参考模型将整个网络的功能划分为7个层次,最高层为应用层,面向用户提供网络应用服务;最底层为物理层,与通信介质相连实现真正的数据通信。两个用户计算机通过网络进行通信时,除物理层之外,其余各对等层之间均不存在直接的通信关系,而是通过各对等层的协议来进行通信。只有两个物理层之间通过通信介质进行真正的数据通信。

    (3).在OSI标准制定的过程中,采用的方法是将整个庞大而复杂的问题划分为若干个容易处理的小问题,这就是分层体系结构方法。分层的原则是:根据不同层次的抽象分层;每层应当实现一个定义明确的功能;功能的选择应该有助于制定协议的国际标准;边界的选择应尽量减少跨过接口的通信量;划分的层数应适当,不能过多或过少。

    2.OSI参考模型各层的功能:

    (1).物理层:物理层的主要任务是透明地传输比特流。物理层不关心比特流的实际意义和结构,只是负责接收和传送比特流。物理层定义网络硬件的特性,包括使用什么样的传输介质以及与传输介质连接的接头等物理特性,所典型规范代表有:EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45等。传送信息所利用的物理传输介质并不在物理层之内而是在物理层之下。

    (2).数据链路层:数据链路层的主要任务是:在两个相邻节点间的线路上无差错地传输以帧(Frame)为单位的数据,并要产生和识别帧边界。数据链路层还提供了差错控制与流量控制的方法,保证在物理线路上传输的数据无差错。数据链路层协议的代表有:SDLC、HDLC、PPP、STP、帧中继等。

    (3).网络层:网络层的主要任务是:进行路由选择,以确保数据分组(Packet)从发送端到达接收端,并在数据分组发生阻塞时进行拥塞控制。网络层还要解决异构网络的互连问题,以实现数据分组在不同类型的网络中传输。网络层协议的代表有:IP、IPX、RIP、OSPF等。

    (4).传输层:传输层的主要任务是:为上一层进行通信的两个进程之间提供一个可靠的端到端服务,使传输层以上的各层不再关心信息传输的问题。传输层从会话层接收数据,形成报文(Message),并且在必要时将其分成若干个分组,然后交给网络层进行传输。传输层协议的代表有:TCP、UDP、SPX等。

    (5).会话层:会话层的主要任务是:针对远程访问进行管理(比如断点续传),包括会话管理、传输同步以及数据交换管理等。

    (6).表示层:表示层的主要任务是:用处理在多个通信系统之间交换信息的表示方式,包括数据格式的转换、数据加密与解密、数据压缩与恢复等。

    (7).应用层:应用层的主要任务是:为网络用户或应用程序提供各种服务,如文件传输、电子邮件、网络管理和远程登录等。

    3.OSI参考模型中的数据传输过程:

     

    三.TCP/IP参考模型

    1.TCP/IP概述:

    (1).ARPANET的运行经验表明,TCP/IP是一个非常可靠且实用的网络协议。20世纪80年代末,美国国家科学会借鉴了ARPANET的TCP/IP技术建立了NSFNET。NSFNET使越来越多的网络互联在一起,最终形成了今天的Internet。TCP/IP也因此成为了Internet上广泛使用的标准网络通信协议。

    (2).TCP/IP标准由一系列的文档定义组成,这些文档定义描述了Internet的内部实现机制,以及各种网络服务或服务的定义。TCP/IP标准并不是由某个特定组织开发的,实际上是一些团体所共同开发的,任何人都可以把自己的意见作为文档发布,但只有被认可的文档才能最终成为Internet标准。

    2.TCP/IP协议栈

    3.各层的功能:

    (1).主机-网络层:事实上,TCP/IP参考模型并没有真正定义这一部分,只是指出在这一层上必须具有物理层和数据链路层的功能。本层包含了多种网络层协议,如以太网协议(Etherent)、令牌环网协议(Token Ring)、分组交换网协议(X.25)等。

    (2).互联层:互联层是整个TCP/IP参考模型的关键部分,它提供的是无连接的服务,主要负责将源主机的数据分组(Packet)发送到目的主机。互联层的主要功能包括:处理来自传输层的分组发送请求、处理接收到的数据报、进行流量控制与拥塞控制等。互联层上定义的主要协议包括:网际协议(IP)、Internet控制报文协议(ICMP)、地址解析协议(ARP)、反向地址解析协议(RARP)等。

    (3).传输层:与OSI参考模型的传输层类似,TCP/IP参考模型的传输层的主要功能是:使发送方主机和接收方主机上的对等实体可以进行会话。在传输层上定义了以下两个端到端的协议:传输控制协议(TCP)和用户数据报协议(UDP)。TCP是一个面向连接的可靠传输协议,而UDP是一个面向无连接的不可靠传输协议。

    (4).应用层:应用层负责向用户提供一组常用的应用程序接口,包含了所有TCP/IP协议簇中的高层协议,如FTP、SMTP、HTTP、SNMP、DNS等。应用层协议一般可以分为3类:一类是依赖于面向连接的TCP;一类是依赖于无连接的UDP;还有一类则既依赖于TCP又依赖于UDP。

     

    四.OSI参考模型与TCP/IP参考模型

    1.两种模型的共同点:(1).采用了协议分层方法,将庞大且复杂的问题划分为若干个较容易处理的范围较小的问题;(2).各协议层次的功能大体上相似,都存在网络层、传输层和应用层;(3).两者都可以解决异构网络的互联,实现世界上不同厂家生产的计算机之间的通信;(4).两者都是计算机通信的国际性标准,虽然这种标准一个(OSI)原则上是国际通用的,一个(TCP/IP)是当前工业界使用最多的;(5).两者都能够提供面向连接和面向无连接的两种通信服务机制。

    2.两种模型的不同点:(1).模型设计的差别;(2).层数和层间调用关系不同;(3).最初设计的差别;(4).对可靠性的强调不同;(5).标准的效率和性能上存在差别;(5).市场应用和支持上不同。

    3.OSI参考模型的优缺点:

    (1).OSI参考模型详细定义了服务、接口和协议,并将它们严格加以区分,实践证明了这种做法是非常有必要的。

    (2).OSI参考模型产生在协议发明之前,这意味着该模型没有偏向于任何特定的协议,因此非常通用。

    (3).OSI参考模型的某些层次(如会话层和表示层)对于大多数应用程序来说都没有用,而且某些功能在各层重复出现(如寻址、流量控制和差错控制),这样影响了系统的工作效率。

    (4).OSI参考模型的结构和协议虽然大而全,但显过于繁杂和臃肿,因而效率较低,实现起来较为困难。

    4.TCP/IP参考模型的优缺点:

    (1).TCP/IP参考模型是对已有协议的描述,协议和模型匹配的相当好。

    (2).TCP/IP参考模型只是对一种已有标准的概念性描述。所以协议简单高效,可操作性强。

    (3).TCP/IP参考模型没有明显地区来区分、接口和协议的概念。因此,对于使用新技术来设计新网络,TCP/IP参考模型则不是一个很好的模版,

    (4).由于TCP/IP参考模型是对自己已有协议的描述,因此通用性差。

    (5).某些层次的划分不尽合理,如主机-网络层。

    5.网络参考模型的建议:从上述分析看,OSI的7层协议体系结构既复杂又不适用,但其概念清楚;TCP/IP的协议得到了全世界的承认,但并没有一个完整的体系结构。因此在学习计算机体系结构时,可以采用一直折衷的方法,即把OSI参考模型中的会话层和表示层去掉,从而形成一种原理结构,只有5层。这种参考模型也被称为五层参考模型。

     

    转载于:https://www.cnblogs.com/linxx/p/7726720.html

    展开全文
  • Android多媒体开发

    千次阅读 2016-10-02 12:38:29
    多媒体(duō méi tǐ) 的英文单词是Multimedia,它由media和multi两部分组成。一般理解为多种媒体的综合 多媒体计算机和视频技术的结合,实际上它是两媒体;声音和图像,或者用现在的术语:音响和电视。 ...

    Android多媒体开发系列文章

    1. Android多媒体开发:录音机
    2. Android多媒体开发:照相机
    3. TextureView+MediaPlayer实现在线短视频播放
    4. Android多媒体开发:第三方框架

    一、什么是多媒体

    • 多媒体(duō méi tǐ) 的英文单词是Multimedia,它由media和multi两部分组成。一般理解为多种媒体的综合

    • 多媒体是计算机和视频技术的结合,实际上它是两个媒体;声音和图像,或者用现在的术语:音响和电视。

    • 多媒体(Multimedia),在计算机系统中,组合两种或两种以上媒体的一种人机交互式信息交流和传播媒体

    • 使用的媒体包括文字、图片、照片、声音 (包含音乐、语音旁白、特殊音效)、动画和影片,以及程式所提供的互动功能

    • 多媒体是超媒体(Hypermedia)系统中的一个子集,而超媒体系统是使用超链接 (Hyperlink)构成的全球信息系统

    • 全球信息系统是因特网上使用 TCP/IP 协议和 UDP/IP 协议

    二、音乐播放器

    Android 官方提供了MediaPlayer 核心类,用于播放音乐,其状态流程如下图所示。MediaPlayer 必须严格按照状态图操作,否则就会出现错误,这些错误都是底层抛出,严格按照状态图操作的话一般就不会出问题。

    MediaPlayer,原生的API,可以播放音视频,但是支持的格式比较少,实际开发中用的比较少,但是还是很有必要学习,熟悉API,因为Vitamio框架的API大部分跟原生的API是一样的

    1、MediaPlayer使用流程图

    这里写图片描述

    2、MediaPlayer核心方法

    方法 说明
    create() 播放本地res/raw/目录下的资源
    reset() 重置为初始状态
    setAudioStreamType() 设置音乐格式,例如:AudioManager.STREAM_MUSIC
    setDataSource() 设置音频源,本地网络资源均可
    prepare() 播放前的准备工作
    prepareAsync() 异步进行准备工作,播放网络音频的时候使用
    start() 开始或恢复播放
    pause() 暂停播放
    stop() 停止播放
    release() 释放资源
    getDuration() 获取音乐最大长度(毫秒单位)
    getCurrentPosition() 获取当前的播放进度
    seekTo() 拖拽进度
    setDisplay() 设置输出画面
    setOnPreparedListener() 设置准备监听

     
    为了演示MediaPlayer 的使用,我们需要提前准备一个mp3 文件放到sdcard 中

    需求:制作一个播放器,能够播放/暂停/停止音乐文件,并且添加一个SeekBar(可以拖拽的ProgressBar),当音乐播放时SeekBar 也会不断的跟新当前的进度,当用户拖动SeekBar 时可以更改播放的进度

    这里写图片描述

    布局文件

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
    
            <Button
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:onClick="play"
                android:text="播放"/>
    
            <Button
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:onClick="pause"
                android:text="暂停"/>
    
            <Button
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:onClick="stop"
                android:text="停止"/>
    
        </LinearLayout>
    
        <SeekBar
            android:id="@+id/sb"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    </LinearLayout>
    

    代码实现

    public class MainActivity extends Activity implements OnSeekBarChangeListener {
    
            private SeekBar     sb;
            private MediaPlayer player;
            private int         duration;
            // 播放器的几个状态
            private static final int PLAYING  = 1;// 播放状态
            private static final int PAUSING  = 2;// 暂停状态
            private static final int STOPPING = 3;// 停止状态
            private volatile     int CURRENT  = 0;// 当前状态
            private Timer timer;
    
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                sb = (SeekBar) findViewById(R.id.sb);
                //设置拖动监听
                sb.setOnSeekBarChangeListener(this);
            }
    
            //播放
            public void play(View view) {
                if (player != null) {
                    if (CURRENT == PLAYING) {
                        Toast.makeText(this, "音乐已经在播放了", Toast.LENGTH_SHORT).show();
                        return;
                    } else if (CURRENT == PAUSING) {
                        player.start();
                        CURRENT = PLAYING;
                        return;
                    }
                }
                try {
                    //创建一个播放器对象
                    player = new MediaPlayer();
                    //给播放器设置音乐路径
                    player.setDataSource("/mnt/sdcard/test.mp3");
                    //设置音乐格式
                    player.setAudioStreamType(AudioManager.STREAM_MUSIC);
                    //准备
                    player.prepare();
                    //获取音乐最大长度(毫秒单位)
                    duration = player.getDuration();
                    //给SeekBar 设置最大值
                    sb.setMax(duration);
                    //音乐开始播放
                    player.start();
                    //设置当前的状态为播放
                    CURRENT = PLAYING;
                    if (timer == null) {
                        //创建定时器
                        timer = new Timer();
                    }
                    /**
                     * 参数1:匿名内部类,相当于Runnable 类
                     * 参数2:第一次延时多长时间(毫秒)后执行,0 则代表立即执行
                     * 参数3:每隔多长时间(毫秒)执行一次
                     */
                    timer.schedule(new TimerTask() {
    
                        @Override
                        public void run() {//该方法每1 秒被调用一次
                            if (CURRENT == PLAYING) {
                                runOnUiThread(new Runnable() {
    
                                    @Override
                                    public void run() {
                                        //双重判断,尽可能避免线程问题,因为该段代码时在主线程中的,
                                        //第一次判断是在子线程中进行的
                                        if (player != null && CURRENT == PLAYING) {
                                            //获取当前的播放进度
                                            int currentPosition = player.getCurrentPosition();
                                            //设置给SeekBar
                                            sb.setProgress(currentPosition);
                                        }
                                    }
                                });
                            }
    
                        }
                    }, 0, 1000);
    
                } catch (Exception e) {
                    e.printStackTrace();
                    Toast.makeText(this, "音乐播放失败" + e, 0).show();
                }
            }
    
            /**
             * 暂停
             */
            public void pause(View view) {
                if (player != null && CURRENT == PLAYING) {
                    player.pause();
                    CURRENT = PAUSING;
                }
            }
    
            /**
             * 停止
             */
            public void stop(View view) {
                if (player != null) {
                    if (CURRENT == PLAYING || CURRENT == PAUSING) {
                        CURRENT = STOPPING;
                        //取消定时器
                        timer.cancel();
                        timer = null;
                        player.stop();
                        player.reset();
                        player.release();
                        player = null;
                        sb.setProgress(0);
                    }
                }
            }
    
            /*
            * 拖动过程中回调多次
            */
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                if (player == null) {
                    sb.setProgress(0);
                } else {
                    player.seekTo(progress);
                }
            }
    
            /*
            * 开始拖动前回调一次
            */
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                if (player == null) {
                    Toast.makeText(this, "音乐播放器还未开始", Toast.LENGTH_SHORT).show();
                }
            }
    
            /*
            * 结束拖动后回调一次
            */
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
            }
    
            @Override
            protected void onDestroy() {
                super.onDestroy();
                stop(null);
            }
    
        }

    3、播放本地res/raw/目录下的资源

    MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1);
    mediaPlayer.start(); // no need to call prepare(); create() does that for you

    4、播放本地URI资源

    Uri myUri = ....; // initialize Uri here
    MediaPlayer mediaPlayer = new MediaPlayer();
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    mediaPlayer.setDataSource(getApplicationContext(), myUri);
    mediaPlayer.prepare();
    mediaPlayer.start();

    5、播放网络资源

    String url = "http://........"; // your URL here
    MediaPlayer mediaPlayer = new MediaPlayer();
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    mediaPlayer.setDataSource(url);
    mediaPlayer.prepare(); // might take long! (for buffering, etc)
    mediaPlayer.start();

    6、异步准备

    String url = "http://........"; // your URL here
            MediaPlayer mediaPlayer = new MediaPlayer();
            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            mediaPlayer.setDataSource(url);
            mediaPlayer.prepareAsync();
            mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    mp.start();
                }
            });

    7、在后台Service异步执行播放任务

    public class MyService extends Service implements MediaPlayer.OnPreparedListener {
        MediaPlayer mMediaPlayer;
        private static final String ACTION_PLAY = "com.example.action.PLAY";
        MediaPlayer mMediaPlayer = null;
    
        public int onStartCommand(Intent intent, int flags, int startId) {
            ...
            if (intent.getAction().equals(ACTION_PLAY)) {
                mMediaPlayer = ... // initialize it here
                mMediaPlayer.setOnPreparedListener(this);
                mMediaPlayer.prepareAsync(); // prepare async to not block main thread
            }
        }
    
        /** Called when MediaPlayer is ready */
        public void onPrepared(MediaPlayer player) {
            player.start();
        }
    }
    
     public void initMediaPlayer() {
            // ...initialize the MediaPlayer here...
    
            mMediaPlayer.setOnErrorListener(this);
        }
    
        @Override
        public boolean onError(MediaPlayer mp, int what, int extra) {
            // ... react appropriately ...
            // The MediaPlayer has moved to the Error state, must be reset!
        }
    

    8、在手机睡眠时使用唤醒锁

    mMediaPlayer = new MediaPlayer();
    // ... other initialization here ...
    mMediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
    
    //wifi锁
    WifiLock wifiLock = ((WifiManager) getSystemService(Context.WIFI_SERVICE))
        .createWifiLock(WifiManager.WIFI_MODE_FULL, "mylock");
    
    wifiLock.acquire();
    
    //当暂停,不再需要网络时释放锁
    wifiLock.release();

    9、在前台服务运行播放任务

    这里写图片描述这里写图片描述

    String songName;
    // assign the song name to songName
    PendingIntent pi = PendingIntent.getActivity(getApplicationContext(), 0,
                    new Intent(getApplicationContext(), MainActivity.class),
                    PendingIntent.FLAG_UPDATE_CURRENT);
    Notification notification = new Notification();
    notification.tickerText = text;
    notification.icon = R.drawable.play0;
    notification.flags |= Notification.FLAG_ONGOING_EVENT;
    notification.setLatestEventInfo(getApplicationContext(), "MusicPlayerSample",
                    "Playing: " + songName, pi);
    startForeground(NOTIFICATION_ID, notification);

    10、处理音频焦点

    AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    int result = audioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC,
        AudioManager.AUDIOFOCUS_GAIN);
    
    if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
        // could not get audio focus.
    }

    requestAudioFocus() 方法的第一个参数是一个 AudioManager.OnAudioFocusChangeListener,当任何时候音频焦点发生变化的时候,会回调 OnAudioFocusChangeListener的onAudioFocusChange()方法

    class MyService extends Service
                    implements AudioManager.OnAudioFocusChangeListener {
        // ....
        public void onAudioFocusChange(int focusChange) {
            // Do something based on focus change...
        }
    }

    11、播放完毕时手动释放资源

    public class MyService extends Service {
       MediaPlayer mMediaPlayer;
       // ...
    
       @Override
       public void onDestroy() {
           if (mMediaPlayer != null) mMediaPlayer.release();
       }
    }

    三、Mp3文件简介

    ID3

    一般是位于一个mp3文件的开头或末尾的若干字节内,附加了关于该mp3的歌手,标题,专辑名称,年代,风格等信息,该信息就被称为ID3信息,ID3信息分为两个版本,v1和v2版。 其中:v1版的ID3在mp3文件的末尾128字节,以TAG三个字符开头,后面跟上歌曲信息。 v2版一般位于mp3的开头,可以存储歌词,该专辑的图片等大容量的信息。

    V1与V2

    • ID3V1记录在MP3文件的末尾,长度固定
    • ID3V2就记录在MP3文件的首部。 ID3V2一共有4个版本,但流行的播放软件一般只支持第3版,既ID3v2.3。
    • 对ID3V2的操作比ID3V1要慢。而且ID3V2结构比ID3V1的结构要复杂得多,但比ID3V1全面且可以伸缩和扩展。

    四、视频播放器

    1、SurfaceView

    SurfaceView提供了一个绘画的界面,你可以控制该界面的格式和大小,SurfaceView 负责在屏幕正确位置安置一个界面。SurfaceView的其中一个目的,是为了在子线程渲染屏幕,但需要注意几点

    • 所有SurfaceView 和SurfaceHolder.Callback 的方法,都必须在主线程调用
    • 必须保证绘制线程,必须在SurfaceView 有效的情况下才能使用,也就是在SurfaceHolder.Callback.surfaceCreated() 和SurfaceHolder.Callback.surfaceDestroyed()之间调用

    SurfaceView是View的子类,等同于TextView、ImageView等一系列控件。核心功能可以通过子线程进行界面的绘制,绘制需要注意的内容:

    所有SurfaceView和SurfaceHolder.Callback的方法都应该在UI线程里调用,一般来说就是应用程序主线程。渲染线程所要访问的各种变量应该作同步处理。

    由于surface可能被销毁,它只在SurfaceHolder.Callback.surfaceCreated()和 SurfaceHolder.Callback.surfaceDestroyed()之间有效,所以要确保渲染线程访问的是合法有效的surface

    • 双缓冲技术:内存中有两个画布,A画布显示至屏幕,B画布在内存中绘制下一帧画面,绘制完毕后B显示至屏幕,A在内存中继续绘制下一帧画面
    • SurfaceView 是双缓冲机制,一个用来缓冲数据,另一个用来展现数据,可以提高数据展示的速度,单缓冲需要先加载数据再去展示数据,但是双缓冲在展示第一个页面数据的时候已经把第二个页面的数据加载好了
    • 对画面的实时更新要求较高,重量级组件,可见时才创建
    • SurfaceView一旦不可见,就会被销毁,一旦可见,就会被创建,销毁时停止播放,再次创建时再开始播放
    • 播放视频也是用MediaPlayer,不过跟音频不同,要设置显示在哪个SurfaceView

    2、使用MediaPlayer+SurfaceView 播放视频

    在该节中,视频播放依然使用MediaPlayer 类,为了方便演示,我们直接使用本文中创建的工程,只需在布局文件添加SurfaceView 控件即可

    布局文件

    <RelativeLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:paddingBottom="@dimen/activity_vertical_margin"
            android:paddingLeft="@dimen/activity_horizontal_margin"
            android:paddingRight="@dimen/activity_horizontal_margin"
            android:paddingTop="@dimen/activity_vertical_margin"
            tools:context=".MainActivity">
    
            <SurfaceView
                android:id="@+id/sv"
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>
    
        </RelativeLayout>

    实现代码

    public class MainActivity extends Activity {
            private MediaPlayer player;
            static int currentPosition;
            private SurfaceView sv;
    
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
    
                sv = (SurfaceView) findViewById(R.id.sv);
                //拿到surfaceview的控制器
                final SurfaceHolder sh = sv.getHolder();
    
                //      Thread t = new Thread(){
                //          @Override
                //          public void run() {
                //              try {
                //                  sleep(200);
                //              } catch (InterruptedException e) {
                //                  e.printStackTrace();
                //              }
                //              runOnUiThread(new Runnable() {
                //                  @Override
                //                  public void run() {
                //                      MediaPlayer player = new MediaPlayer();
                //                      player.reset();
                //                      try {
                //                          player.setDataSource("sdcard/2.3gp");
                //                          player.setDisplay(sh);
                //                          player.prepare();
                //                          player.start();
                //                      } catch (Exception e) {
                //                          e.printStackTrace();
                //                      } 
                //                      
                //                  }
                //              });
                //              
                //          }
                //      };
                //      t.start();
                //SurfaceView是重量级组件,可见时才会创建
                //给SurfaceHolder设置CallBack,类似于侦听,可以知道SurfaceView的状态
                sh.addCallback(new Callback() {
    
                    //surfaceView销毁时调用
                    @Override
                    public void surfaceDestroyed(SurfaceHolder holder) {
                        //每次surfaceview销毁时,同时停止播放视频
                        if(player != null){
                            currentPosition = player.getCurrentPosition();
                            player.stop();
                            player.release();
                            player = null;
                        }
                    }
                    //surfaceView创建时调用
                    @Override
                    public void surfaceCreated(SurfaceHolder holder) {
                        //每次surfaceView创建时才去播放视频
                        if(player == null){
                            player = new MediaPlayer();
                            player.reset();
                            try {
                                player.setDataSource("sdcard/2.3gp");
                                player.setDisplay(sh);
                                player.prepare();
                                player.start();
                                player.seekTo(currentPosition);
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
                    }
                    //surfaceView结构改变时调用
                    @Override
                    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    
                    }
                });
            }
        }

    使用VideoView 播放视频

    VideoView 跟MediaPlayer 相比播放视频步骤要简单的多,因为VideoView 原生提供了播放,暂停、快进、快退、进度条等方法。使用起来要方便的很多

    1、设置布局文件,布局文件比较简单,因此这里只给你VideoView 标签

     <VideoView
     android:id="@+id/vv"
     android:layout_width="match_parent"
     android:layout_height="match_parent" />

    2、设置VideoView 的播放文件路径和媒体控制器,调用start 方法即可播放媒体文件

    //实例化VideoView 对象
    vv = (VideoView) findViewById(R.id.vv);
    //从界面获取播放路径
    et_path = (EditText) findViewById(R.id.et_path);
    
    //给VideoView 设置视频路径
    vv.setVideoPath(et_path.getText().toString());
    //设置VideoView 控制器,我们当前类实现了MediaPlayerControl 接口
    vv.setMediaController(new MediaController(this));
    //开始播放
     vv.start();
     //设置当前播放器窗口设置为焦点
     vv.requestFocus();

    3、覆写MediaPlayerControl 接口中的抽象方法

     @Override
        public void start() {
        }
    
        @Override
        public void pause() {
    
        }
    
        @Override
        public int getDuration() {
            return 0;
        }
    
        @Override
    
        public int getCurrentPosition() {
            return 0;
        }
    
        @Override
        public void seekTo(int pos) {
        }
    
        @Override
        public boolean isPlaying() {
            return false;
        }
    
        @Override
        public int getBufferPercentage() {
            return 0;
        }
    
        @Override
        public boolean canPause() {
            return false;
        }
    
        @Override
        public boolean canSeekBackward() {
            return false;
        }
    
        @Override
        public boolean canSeekForward() {
            return false;
        }
    
        @Override
        public int getAudioSessionId() {
            return 0;
        }
    
    
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            return super.onKeyDown(keyCode, event);
        }
    
        @Override
        public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) {
            return super.onKeyMultiple(keyCode, repeatCount, event);
        }

    注意:上面的方法都是回调方法,我们可以在这些方法里面实现我们的业务逻辑。只有当我们给VideoView设置setMediaController 后控制器才会出现

    这里写图片描述

    收音机

    • 播放协议: MMS
    • MMS(Microsoft Media Server protocol)是一种串流媒体传送协议 ,android并不支持这种流媒体协议

    引入Vitamo框架进行播放

    • 核心类:io.vov.vitamio.MediaPlayer
    • 操作:同系统的MediaPlayer,代码编写与播放网络音乐相近

    视频处理

    电影文件有很多基本的组成部分。首先,文件本身被称为容器Container,容器的类型决定了信息被存放在文件中的位置。AVI和Quicktime就是容器的例子。接着,你有一组流,例如,你经常有的是一个音频流和一个视频流。(一个流只是一种想像出来的词语,用来表示一连串的通过时间来串连的数据元素)。在流中的数据元素被称为帧Frame。每个流是由不同的编码器来编码生成的。编解码器描述了实际的数据是如何被编码Coded和解码DECoded的,因此它的名字叫做CODEC。接着从流中被读出来的叫做包Packets。包是一段数据,它包含了一段可以被解码成方便我们最后在应用程序中操作的原始帧的数据。

    七个模块分别为:读文件模块,解复用模块 ,视频解码模块,音频解码音频,颜色空间转换模块,视频显示模块,音频播放模块

    粗略的分为五类,分别是 Source filer, Demux flter, Decoder filter, Color Space converter filter,Render filter,各类 filter的功能与作用简述如下

    Source filter

    Source filter 源过滤器的作用是为下级 demux filter 以包的形式源源不断的提供数据流。在通常情况下,我们有多种方式可以获得数据流,一种是从本地文件中读取,一种是从网上获取,Sourcefilter 另外一个作用就是屏蔽读本地文件和获取网络数据的差别,在下一级的 demux filter 看来,本地文件和网络数据是一样的。

    Demux filter

    解复用过滤器的作用是识别文件类型,媒体类型,分离出各媒体原始数据流,打上时钟信息后送给下级 decoder filter。为识别出不同的文件类型和媒体类型,常规的做法是读取一部分数据,然后遍历解复用过滤器支持的文件格式和媒体数据格式,做匹配来确定是哪种文件类型,哪种媒体类型;有些媒体类型的原始数据外面还有其他的信息,比如时间,包大小,是否完整包等等。demux filter 解析数据包后取出原始数据,有些类型的媒体不管是否是完整包都立即送往下级 decoder filter,有些类型的媒体要送完整数据包,此时可能有一些数据包拼接的动作;当然时钟信息的计算也是 demux filter 的工作内容,这个时钟用于各媒体之间的同步。在本例中,AVI Splitter 是 Demux filter。

    Decoder filter

    解码过滤器的作用就是解码数据包,并且把同步时钟信息传递下去。对视频媒体而言,通常是解码成 YUV 数据,然后利用显卡硬件直接支持 YUV 格式数据 Overlay 快速显示的特性让显卡极速显示。YUV格式是一个统称,常见的有 YV12,YUY2,UYVY 等等。有些非常古老的显卡和嵌入式系统不支持 YUV 数据显示,那就要转换成 RGB 格式的数据,每一帧的每一个像素点都要转换,分别计算 RGB 分量,并且因为转换是浮点运算,虽然有定点算法,还是要耗掉相当一部分 CPU,总体上效率底下;对音频媒体而言,通常是解码成 PCM 数据,然后送给声卡直接输出。在本例中,AVI Decompress 和 ACM Warper 是 decoder filter。

    Color space converter filter

    颜色空间转换过滤器的作用是把视频解码器解码出来的数据转换成当前显示系统支持的颜色格式。通常视频解码器解码出来的是 YUV 数据,PC 系统是直接支持 YUV 格式的,也支持 RGB 格式,有些嵌入式系统只支持 RGB 格式的。在本例中,视频解码器解码出来的是 RGB8 格式的数据,Color space converter filter 把 RGB8 转换成 RGB32 显示。

    Render filter

    渲染过滤器的作用就是在适当的时间渲染相应的媒体,对视频媒体就是直接显示图像,对音频就是播放声音。视音频同步的策略方法有好几种,其中最简单的一种就是默认视频和音频基准时间相同,这时音频可以不打时钟信息,通过计算音频的采样频率,量化 bit 数,声道数等基本参数就知道音频 PCM 的数据速率,按照这个速率往前播放即可;视频必须要使用同步时钟信息来决定什么时候显示。DirectShow 采用一个有序链表 ,把接收到的数据包放进有序链表中,启动一个定时器,每次定时器时间到就扫描链表,比较时钟信息,或者显示相应的帧,或者什么也不做,每次接收到新的数据帧,首先判断时钟信息,如果是历史数据帧就丢弃,如果是将来显示数据帧就进有序链表,如果当前时间帧就直接显示。如此这样,保持视频和音频在人体感觉误差范围内相对的动态同步。在本例中 VideoRender 和 Default DirectSound Device 是 Render filter,同时也是 Sink filter

    JetPlayer

    JetPlayer jetPlayer = JetPlayer.getJetPlayer();
    jetPlayer.loadJetFile("/sdcard/level1.jet");
    byte segmentId = 0;
    
    // queue segment 5, repeat once, use General MIDI, transpose by -1 octave
    jetPlayer.queueJetSegment(5, -1, 1, -1, 0, segmentId++);
    // queue segment 2
    jetPlayer.queueJetSegment(2, -1, 0, 0, 0, segmentId++);
    
    jetPlayer.play();

    TextureView

    TextureView、Surfaceview、SurfaceTexture、GLSurfaceView

    画中画

    https://github.com/googlesamples/android-PictureInPicture

    https://developer.android.google.cn/training/tv/playback/picture-in-picture.html?hl=zh-cn#handling_ui

    展开全文
  • 计算机网络基础

    2018-09-03 18:00:47
    计算机网络基础:  1 计算机网络的发展 ...⑵计算机网络的两大组成部分 ⑶网络的功能:硬件/软件共享、信息交换 ⑷计算机网络的典型应用 3 计算机网络的分类 ⑴按拓扑类型分类:总线形、环...

    计算机网络基础:

     1 计算机网络的发展

    ⑴计算机网络发展的四个阶段

    ⑵三大网络:计算机网、电信业务网、广播电视网络

    ⑶网络发现的趋势:宽带网络、全光网络、多媒体网络、移动网络、下一代网络

    2 计算机网络的基本概念

    ⑴计算机网络的定义

    ⑵计算机网络的两大组成部分

    ⑶网络的功能:硬件/软件共享、信息交换

    ⑷计算机网络的典型应用

    3 计算机网络的分类

    ⑴按拓扑类型分类:总线形、环形、星形、树形、网形、混合形

    ⑵按网络交换方式分类:电路交换网、报文交换、分组交换

    ⑶按网络覆盖的范围分类:广域网、局域网、域域网

    ⑷按网络传输技术分类:广播方式、点对点方式

    计算机网络的标准化:

    国际标准化组织

    其他标准化机构

    Internet的组织机构

    因特网:

    1 数以百万计的互联

    ⑴主机 端接系统

    pc工作站  服务器

    PDA电话  智能家电

    运行 网络应用程序

    2 通信链路

     光纤 铜缆 无线电 卫星

    3 路由器

    将数据分组(数据块)转发通过网络

     

     

     

     

     

     

     

     

    展开全文
  • 多媒体教室

    2013-06-14 08:10:31
    多媒体网络教室由教师机、学生机、路由器软件所组成,具体功能为: 教师机:广播教学、语音教学、语音对讲、学生演示、监控转播、屏幕录制、屏幕回放、黑屏肃静、网络影院、文件分发、电子教鞭、班级模型、系统设置...
  • 它由采集压缩系统、图像处理系统、光盘制作系统、教师备课系统、服务器和若干台多媒体计算机组成。 · 学校办公网 通过在校园网上运行的综合信息管理系统,学校的教学管理和日常的管理实现办公自动化,如学生学籍...
  • 为保持多媒体技术基础课程内容的完整性,《多媒体技术基础》仍由四个部分组成:一是多媒体压缩和编码(第2-13章),主要介绍声音、图像和数字电视媒体的基本知识、压缩和编码方法;二是多媒体存储(第14-16章),主要...
  • 下图给出了因特网 Email 系统的总体情况,从该图中我们可以看到它有三个主要组成部分:邮件客户端(user agent)、邮件服务器(mail server)和简单邮件传输协议(Simple Mail Transfer Protocol, SMTP)。...

    Email 应用概述

    下图给出了因特网 Email 系统的总体情况,从该图中我们可以看到它有三个主要组成部分:邮件客户端(user agent)、邮件服务器(mail server)和简单邮件传输协议(Simple Mail Transfer Protocol, SMTP

    • 邮件客户端允许用户读、写 Email 消息,它可以与邮件服务器交互,收、发 Email 消息。
    • 邮件服务器是 Email 体系结构的核心,它为每一个用户分配一个邮箱(mailbox),并且有一个消息队列(message queue)存储等待发送的 Email,发送失败的邮件会在保存该消息队列中并在以后尝试再次发送。
    • SMTP协议邮件服务器间传递消息所使用的应用层协议,SMTP 也有两个部分:运行在发送方邮件服务器的客户端和运行在接收方邮件服务器的服务器端每台邮件服务器既运行 SMTP 的客户端也运行 SMTP 的服务器端

    在这里插入图片描述

    一个典型的邮件发送过程是:从发送方的用户代理开始,传输到发送方的邮件服务器,再传输到接收方的邮件服务器,然后在这里被分发到接收方的邮箱中。
    在这里插入图片描述

    SMTP 协议

    简单邮件传输协议(Simple Mail Transfer Protocol, SMTP是因特网电子邮件应用的核心,用于从发送方的邮件服务器发送报文到接收方的邮件服务器,使用 TCP 进行 Email 消息的可靠传输。

    SMTP 问世的时间比 HTTP 要长很多(初始的 SMTP 的 RFC 可追溯到 1982 年,而 SMTP 在此之前就已经出现了),它限制所有邮件报文的体部分(不只是其首部)只能采用简单的 7 位 ASCII 表示,在今天的多媒体时代,在用 SMTP 传送邮件之前,需要将二进制多媒体数据编码为 ASCII 码,并且在使用 SMTP 传输后要求将响应的 ASCII 码邮件解码还原为多媒体数据。

    SMTP 的交互过程:首先,客户端 SMTP 在 25 号端口建立一个到服务器 SMTP 的 TCP 连接。如果服务器没有开机,客户会在稍后继续尝试连接。一旦 TCP 连接建立,服务器和客户执行某些应用层的握手,SMTP 客户指示发送方的邮件地址和接收方的邮件地址。一旦该 SMTP 客户和服务器彼此介绍之后,客户发送该报文,SMTP 能够依赖 TCP 提供的可靠数据传输无差错地将邮件投递到接收服务器。该客户如果有另外的报文要发送到该服务器,就在该相同的TCP 连接上重复这种处理,即 SMTP 用的是持久性连接;否则,它指示 TCP 连接关闭。

    S: 220 hamburger.edu 
    C: HELO crepes.fr 
    S: 250  Hello crepes.fr, pleased to meet you 
    C: MAIL FROM: <alice@crepes.fr> 
    S: 250 alice@crepes.fr... Sender ok 
    C: RCPT TO: <bob@hamburger.edu> 
    S: 250 bob@hamburger.edu ... Recipient ok 
    C: DATA 
    S: 354 Enter mail, end with "." on a line by itself 
    C: Do you like ketchup? 
    C: How about pickles? 
    C: . 
    S: 250 Message accepted for delivery 
    C: QUIT 
    S: 221 hamburger.edu closing connection
    

    上面的例子给出了 SMTP 交互过程,DATA 命令表示客户端要开始发送数据了,收到服务器的回复之后就开始发送数据,客户通过发送一个只包含 . 的行指示该报文结束了(按照 ASCII 码的表示方法,每个报文以 CRLF.CRLF 结束,其中的每个 CRLF 分别表示回车和换行)。

    与 HTTP 的对比

    这两个协议都用于从一台主机向另一台主机传送文件,当进行文件传送时,持久的 HTTP 与 SMTP 都使用持久性连接。因此,这两个协议有一些共同特征,如:

    • 都使用命令/响应交互模式
    • 命令和状态代码都是 ASCII 码

    然而,两者之间也有一些重要的区别:

    • HTTP 是一个拉协议(pull protocol),SMTP 是一个推协议(push protocol)
    • SMTP 报文必须按照 7 比特 ASCII 码进行编码,HTTP 数据则不受这种限制
    • 对于既包含文本又包含图形的文档的处理方法,HTTP 把每个对象封装到它自己的 HTTP 响应报文中,而 SMTP 则把所有报文对象放在一个报文中。

    Email 消息格式

    在这里插入图片描述

    首部行(header)必须含有一个 From: 首部行和一个 To: 首部行,也许包含 Subject: 等其他可选的首部行。注意这些首部行不同于前面前面说到的 SMTP 命令(即使那里也包含了某些相同的词汇,如 from 和 to),SMTP 中的命令是 SMTP 握手协议的一部分,而这里的首部行则是邮件报文自身的一部分。
    消息体(body)指 Email 消息本身,只能是 ASCII 字符

    多媒体扩展

    MIME:多媒体邮件扩展,通过在邮件头部增加额外的行以声明 MIME 的内容类型。

    在这里插入图片描述

    邮件访问协议

    在这里插入图片描述

    接收方的邮件客户端不能使用 SMTP 从邮件服务器获取邮件,因为取邮件是一个拉操作,而 SMTP 是一个推协议,通过引入邮件访问协议来解决这个问题。目前有一些流行的邮件访问协议,包括第三版的邮局协议(Post Office Protocol-Version 3, POP3因特网邮件访问协议(Internet Mail Access Protocol, IMAP以及 HTTP

    这也说明一个网络应用可以综合使用多个应用层协议。

    展开全文
  • 让默认的就可以了,但是超频玩者是肯定不会放过任何可以提高性能的东西的,所以如果你想在这里让你的电脑提升一点性能的话,就必须慢慢试验,选择一适当的参数才能让你的计算机达到性能和稳定的最佳状态!...
  • 入门学习Linux常用必会60命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    这里笔者把比较重要和使用频率最多的命令,按照它们在系统中的作用分成下面六个部分一一介绍。 ◆ 安装和登录命令:login、shutdown、halt、reboot、install、mount、umount、chsh、exit、last; ◆ 文件处理命令...
  • a、两个 b、三个 c、四个 d、五个 6、存储程序原理是由谁于1946年提出的,它明确了计算机硬件组成的五大部分(a) a、冯诺依曼 b、宾州大学 c、布尔 d、爱迪生 7、以下不属于磁盘指标参数的是(c)` a、磁道 b、...
  • 真实感图形的绘制

    千次阅读 2019-07-07 11:23:27
    真实感图形是计算机图形学中一重要的组成部分,它的基本要求是在计算机中生成维场景的真实感图形或图象。多媒体教育、虚拟现实系统、科学计算可视化、动画制作、电影特技模拟、计算机游戏等许多方面,真实感图形...
  • 构成FFmpeg主要有三个部分: 1.源码 可自行到 ffmpeg 官网 下载查看. 2. 工具软件 ffmpeg.exe:音视频转码、转换器 ffplay.exe:简单的音视频播放器 ffprobe.exe:简单的多媒体码流分析器 3.供开发者使用的SDK...
  • 声卡

    千次阅读 2010-05-16 19:17:00
    声卡 (Sound Card)也叫音频卡(港台称之为声效卡):声卡是多媒体技术中最基本的组成部分,是实现声波/数字信号相互转换的一种硬件。声卡的基本功能是把来自话筒、磁带、光盘的原始声音信号加以转换,输出到耳机、...
  • 11、从功能来讲,每台计算机都有控制器、运算器、存储器、输入设备、输出设备五个组成部分。 12、操作系统是用来管理和控制计算机的软、硬件资源。在安装应用软件前,必须安装操作系统。 13、将指挥计算机工作的命令...
  • 会计理论考试题

    2012-03-07 21:04:40
    4.硬盘格式化分三个阶段,其先后顺序为低级格式化、分区、高级格式化。( Y ) 5.西文工作方式下不可输入汉字。( Y ) 6.微机的键盘是一种分离式的智能键盘,通过电缆与显示器连接。( N ) 7.写保护口用于保护存储在...
  • 三部分主要描述了数据库安全和客户-服务器体系结构;第四部分简要介绍了xml、数据挖掘和数据仓库等几种新兴技术。  本书是高等院校计算机及相关专业本科生、研究生数据库系统课程的理想教材,也是对相关技术人员...
  • 全书共分4个部分,第一部分介绍最基本的概念、术语及建模原则,第二部分描述了关系数据模型和关系型DBMS,第三部分讨论数据库设计,第四部分主要描述数据库系统中使用的物理文件结构和存取方法。书中涉及的内容非常...
  • 2004-2010软考程序员真题

    热门讨论 2012-09-27 12:33:00
     34、在word的编辑状态,设置了一由多行和列组成的空表格,将插入点定在某个单元格内,用鼠标单击"表格"命令菜单中的"选定行"命令,再用鼠标单击"表格"命令菜单中的"选定列"命令,则表格中被"选择"的部分是 ...
  • Android程序设计基础

    热门讨论 2013-08-03 16:28:04
     Android作为谷歌公司企业发展战略的重要组成部分,将进一步推进“随时随地为每人提供信息”这一企业目标的实现。作为一款多方倾力打造的平台,Android具有许多优点:实际应用程序运行速度快;开发限制少,平台...
  • ASP.NET精品课程+源代码

    千次下载 热门讨论 2009-01-05 20:15:51
    目前ASP.NET已成为微软推出的新一代MicroSoft.Net的一重要的组成部分。 ASP.NET是Microsoft可用于创建和运行动态的交互式 Web 服务器应用程序。使用可合并的 HTML 页、脚本命令以及 COM 组件,可以创建交互式 Web ...
  • windows 程序设计

    2011-07-24 21:16:30
    在早期,Windows的主要部分仅通过三个动态链接库实作。这代表了Windows的三个主要子系统,它们被称作Kernel、User和GDI。当子系统的数目在Windows最近版本中增多时,大多数典型的Windows程序产生的函数呼叫仍对应到...
  • 根据目前了解的结构分布情况,整个布线系统由工作区子系统、水平子系统、楼层管理区子系统、主干子系统、总设备间子系统五个部分组成。主要考虑正常的语音,数据通信用途,布线系统的定位以目前主流的形式为主,如下:...
  • 三部分 Android用户界面设计精髓 109 第6章 探索用户界面屏幕元素 110 6.1 Android视图、Widget和布局简介 110 6.1.1 Android视图简介 110 6.1.2 Android Widget简介 110 6.1.3 Android布局简介 111 ...
  • Activity Activity是一应用程序组件,提供一屏幕,用户可以用来交互为了完成某项任务,是一负责与用户交互的组件 SSH 为 Struts+Spring+Hibernate的一集成框架,是目前较流行的一种Web应用程序开源框架。...
  • realplayer

    2010-08-18 10:57:02
    a) 此“软件”由交互式 Internet 应用程序组成,可通过 Internet 进行多种通信作为其常规操作的一部分。 许多通信功能是自动的,并可通过默认方式启用。 安装和(或)使用本软件表示您接受本软件的通信功能。 一旦您...
  • 地理信息产业是信息产业的一重要组成部分,地理信息技术是IT技术的一重要分支,地理信息系统软件是一类特殊的计算机信息系统软件,它是以各类空间数据及其属性为基础,为各种应用目的服务的一类计算机信息系统。...
  • Web网站是Internet的重要组成部分,对于公司和企业来说,可以利用网站来展示企业形象,宣传企业,推荐产品并进行电子商务活动,从而利用Internet带来无限商机;对于个人,可以按照爱好和兴趣建立一具有独特风格的...
  • 新版Android开发教程.rar

    千次下载 热门讨论 2010-12-14 15:49:11
    � 开发方向有三个重点 :----------------------------------- Android 编程基础 7 � 应用软件的开发 � 特殊功能的原生链接库 � 专属应用程序框架 � 由于 Android 的A pp Market 性质,可能催生出专门的应用...

空空如也

空空如也

1 2
收藏数 34
精华内容 13
关键字:

多媒体计算机三个组成部分