图书前言

前言

本书理念

多媒体是一门综合性学科,它研究在计算机与网络平台上进行音频、图像和视频等多种媒体的采集、编码、处理、集成、同步、传输和呈现的技术。多媒体的应用领域很广泛,最初是在视听娱乐和大众传媒领域兴起,随着计算机与互联网的快速发展,多媒体已经广泛渗透到工业、交通、通信、管理、军事和教育等众多领域。今天,无论是在PC平台、智能手机上分享图像与视频,还是利用增强虚拟现实系统(enhanced virtual real systems)进行军事模拟训练,或通过视频监控系统检测跟踪运动对象,人们都在充分享受着多媒体技术发展的成果。

作者在高等学校讲授专业多媒体课程有十多年了。在长期教学实践中,作者深切体会到,高校的多媒体技术教学一直受到理论与实践脱节的困扰。表现在教材上,就是大部分教科书都是从国外著作翻译或转述过来的,过于偏向理论描述。客观地讲,这些教材在教学中发挥了积极作用,然而,由于不提供系统的程序和应用设计方面的指导,对原理的解释大多停留在抽象层面,学生虽然接触了很多概念和技术,但还是不能发展出工程实践能力。

当然,学校也不是没有实践性教学,然而无论是深度还是广度,都无法适应数字媒体技术本身的发展。究其原因,除了受实验设备繁多、技术繁杂以及开发工具难用等因素影响以外,作者认为教材与应用系统设计脱节是一个重要原因。

实际上,广大专业教师一直在设法解决上述脱节问题。一方面,一些教师试图在比较偏向原理的教科书中增加实践性内容来改善教材结构,但是这个做法效果有限,因为它没有从根本上改变传统教材以原理为主的特点。另一些长期从事多媒体技术专业教学的老师意识到偏向原理的教材和教学模式的弊端,因此推出了以培养实践能力为主要目标的教材,如《多媒体技术实验教程》《多媒体案例教程》等。这些教材试图大力培养学生的实践动手能力,这是值得称道的。但是,由于学时等条件限制,这些教材又无法系统地阐述原理,而且大都以传授多媒体工具软件(如Photoshop)的使用方法为主,结果使得计算机专业类的多媒体技术教学演变成了技能教育。当然,熟练使用这些工具非常重要,但是,如果一所大学是以培养高级专业技术人才为目标的,就不能以工具性技能教育为主体,而应当构建一种融核心原理和关键技术于一体的教学框架。原理应当深入到核心,关键技术则是核心原理的直接体现,这完全不同于以传授多媒体工具软件使用为主体的教学。

一言以蔽之,作者希望建立一个以核心原理为主线,融知识、技术、标准、平台与应用设计于一体的新型多媒体技术阐述框架。

全书概览

基于上述理念,本教程把原理知识的阐述与更加底层的应用设计紧密结合在一起。基本上,每一个核心原理介绍都会有相关的应用设计与之配套。例如,在介绍了音频编码原理之后,会展示PCM样本合成、音频转码等音频数据处理的程序设计方法; 在介绍了数字图像格式之后,会展示图像显示、滤波、融合、基于图像的自然现象模拟等像素级操作; 在介绍了视频数据格式之后,会展示视频播放、视频特效、视频捕获、YUV视频转码、视频对象检测与跟踪等内容; 在介绍了网络多媒体技术之后,会展示流媒体应用系统搭建、基于套接字的远程桌面图像传输等。可以看出,这些训练不仅展现了核心原理,而且直接触及关键技术,具有综合性和启发性,有较高的学习价值,甚至对科学研究都具有一定的训练意义。只有这样,才能实现培养高级专业技术人才的目标。

全书分为12章。

第1章绪论,介绍多媒体技术的基本概念、应用和技术体系。

第2章编程环境与平台,介绍Win32 API程序的特点和基本设计方法、COM组件编程方法和Microsoft Media Foundation。Microsoft Media Foundation是新一代多媒体开发平台,以取代之前的DirectShow。

第3章数字音频基础,介绍数字音频的基本概念、各种数字音频编码算法及其国际标准。

第4章音频应用程序设计,介绍波形音频文件的格式、音频播放程序设计(包括基于PlaySound 函数的简单播放和基于MF Media Session的复杂播放程序设计)、音频转码程序设计和音频数据处理应用(如混声)。

第5章无损数据压缩算法,介绍几种广泛应用的无损压缩编码算法,包括赫夫曼编码、算术编码、行程编码和词典编码算法。作者在这一章进行了一种新的写作尝试,即对这些算法给出了十分详尽的图形化过程说明,通过举例,将这些算法的循环过程进行了穷尽式描绘,最后还给出了这些算法的伪代码。这些举措的目的是希望为读者带来一种更加轻松的阅读体验,即只要阅读就可以理解内容。

第6章数字图像基础,介绍数字图像的基本概念,包括图像模型、像素、色彩模型、图像分辨率、真彩图像、伪彩图像等。本章的重点是图像数据分析,解析了BMP和GIF两种数字图像格式文件,特别是对BMP格式图像,详尽描述了它的1、4、8、16和24位像素存储模式,并解释了整个位图在内存中的Bottomup(自底向上)放置情形。最后用一节介绍了JPEG静态图像压缩原理。

第7章图像处理与应用程序设计,介绍Windows环境下最常用的图像开发工具GDI和典型的图像处理技术(如正立显示、倒立显示、图像滤波、灰度化、浮雕滤镜、图像融合等)。为了帮助读者进一步理解像素操作的意义,本章还介绍了基于图像的水波纹模拟,该示例展示了图像处理的妙用,并解释了动画原理,程序还揭示了双缓冲技术的应用。

第8章数字视频基础,介绍模拟视频的基本概念、模拟视频到数字视频的转换,尤其是数字视频的采样格式。本章还详细介绍了几乎所有的数字视频格式,包括适用于存储场合的平面格式,以及适用于实时场合的紧凑格式。为了进一步帮助读者理解视频数据流的意义,本章给出了一个解码并显示著名的foreman.yuv视频文件的程序,该程序在一定程度上揭示了解码器和视频播放器的工作原理。

第9章视频应用程序设计,介绍几个典型的视频应用案例,包括视频播放、视频特效、字幕和图标添加、淡入淡出等。本章还详细介绍了基于Media Foundation的视频捕获程序设计,这是一个有很强实用性的应用。最后介绍运动对象检测与跟踪技术。

第10章数字视频编码原理与标准,介绍视频压缩的一般原理、当前流行的H.26x和MPEG系列视频编码国际标准。

第11章网络多媒体基础,介绍网络多媒体的概念和面临的主要挑战、网络多播技术、实时传输协议(RTP)和实时传输控制协议(RTCP)、流媒体技术和流媒体协议、典型视频服务系统的应用。本章还介绍了Media Foundation的网络源特性,这是利用Media Foundation开发桌面多媒体客户端的基础。最后介绍视频会议系统的概念、组件和系统结构。

第12章网络多媒体应用程序设计,主要介绍基于WinSock的多媒体传输技术。首先介绍WinSock编程的基本方法。然后介绍一个基于屏幕捕获与WinSock的远程桌面图像传输与显示系统,该系统包括两部分,一是捕获并发送桌面图像的服务器,另一部分是接收并显示远程图像序列的客户端。该示例展现了较为底层的多媒体传输的基本原理。

总体上,本教程试图系统地提供多媒体核心原理及其关键技术应用的内容。

本书适合的读者群

本书的主要目标是作为本科计算机科学与技术、自动化、电子信息、通信工程、信息安全、数字媒体、物联网工程、软件工程等专业的多媒体技术专业课程教材。

本书也适合关注和深入研究多媒体底层开发的读者阅读,特别适合对多媒体技术有兴趣的读者自学。

如果读者希望全面掌握本书内容,应当具备计算机程序设计、操作系统和计算机网络等方面的基础知识。此外,由于本书以Windows操作系统和Visual Studio平台的 C/C++为程序设计环境,因此也要求对C/C++编程语言有基本的了解,并且理解基本的面向对象技术。此外,如果读者了解Windows程序设计方法,特别是对消息驱动机制、回调函数、窗口过程等概念有认识的话,自然是最好不过的事情。但是,即使读者没有这方面的知识也不要紧,因为本书的第2章会简明扼要地介绍Windows程序的基本结构和运行机制。

本书的代码

本书的源代码表现为完整的VC++工程文件包,每一个实例程序都是从Visual Studio 2010自动生成的Win32 API应用框架开始,通过添加自定义功能实现的。此外,作者还力求将程序清单中的注释量降到最小,因为我们认为,编写规范、逻辑清晰的程序本身应当具有良好的可读性。

读者可能要问,在众多的开发语言和模式中,为什么本书选择Windows API程序作为基本的实践平台?这当然是因为Windows API程序比较适合本书的需要。本书的主要目标是展示多媒体技术的核心原理,所以,偏向底层开发的Win32 API程序自然是最佳选择,如果进一步考虑到原生桌面应用的广泛性和更高性能的话更是如此。

本书的源程序均在清华大学出版社网站(www.tup.com.cn)本书页面中提供下载。当然,作者也并不打算更新这些源代码,因为这些程序都是易于理解和使用的,并且具有基础性和稳定性。

致使用本书的教师

随着信息技术与互联网技术的发展,高等教育正经历一场变革。就课堂教学而言,传统的以传授专业知识为主的教学模式正被以培养创新创业能力为核心的互动式、启发式教学所取代。本书所提倡的以核心原理为主线,融知识、技术、标准、平台与应用设计于一体的新型多媒体技术阐述框架,可以看成是顺应这一趋势的某种尝试。

第一,采用本书进行教学,最好要求学生把笔记本电脑带到课堂,教师边讲理论知识,边进行程序案例演示。还可以在课堂上组织小组讨论和协同应用设计。这其实就是一种“讲练结合”的互动课堂教学模式。当然,有些理论性较强的内容,如无损数据压缩算法、数字视频编码原理与标准、网络多媒体基础等,可能以讲授为主,但也需要结合实际应用加以解释。例如,在讲授字典编码算法的时候,可以用流行的压缩软件(如WinRAR)作为实例,说明字典算法的重要应用(可以研究一下相关软件的配置页面信息)。

在课堂上进行多媒体应用设计是一个挑战。首先,教师需要做好充分的上课准备,对于计划解决的问题及其编程方案,自己都要事先做一遍,确保无误。因为一旦在课堂上陷入某种困局,不仅会让教师难堪,而且也浪费时间。当然,对于有些探索性课题(例如,学生在课堂上突然提出的问题),在恰当控制时间的前提下,教师可以当堂编写程序,或者组织学生尝试解决,并说明允许失败。其次,要注意把时间和精力用在核心技术上。就是说,对于一些比较复杂的应用系统设计,可以采取组装程序的办法,快速搭建应用系统框架,然后在关键部分采取现场编码的方式进行展示。例如,本书第7章介绍有若干典型图像处理算法,课堂演示或组织学生编程实践的时候,可以先把除关键代码以外的辅助性代码通过文本文件发给学生,然后从文本文件中复制各个模块的基本代码(如打开图像文件操作)以便搭建可运行的程序框架,最后集中力量编写核心算法实现代码。实践证明,这种方式能够有效平衡课堂时间限制与编程实践需要之间的矛盾。

第二,除课堂上的讲练结合教学以外,有些内容可以在讲解核心原理并进行展示的基础上,安排学生课后消化吸收。例如本书介绍的一些相对复杂的应用(音频转码、视频捕获、运动对象检测与跟踪等),可以由学生在课后进行深入研究。

第三,教师还需要根据具体学校的培养方案和教学大纲课时限制,合理安排教学进程,做到重点突出,难点讲透。重点和难点以外的其他内容可以安排课后自学。当然,具体教学还需要考虑学生的基础和条件。

下表是以32学时(其中4学时实验)为基准给出的一个教学进程参考。

序号章节课堂讲授重点难点学时课外自学

1第1章绪论

第2章编程环境与平台多媒体的概念、多媒体应用、体系结构; Win32 API程序基础; Microsoft Media Foundation基础Windows程序运行机制2组件编程初步、多媒体应用系统设计面临的挑战、Microsoft Media Foundation音视频管道

2第3章数字音频基础声音及其属性、采样与量化; 数字音频编码; 数字音频编码国际标准PCM非线性编码、增量调制编码、自适应差分脉冲编码调制2

3第4章音频应用程序设计波形音频文件分析; 音频播放程序; 音频转码程序概述、在转码程序中操作音频数据波形音频文件分析; 在转码程序中操作音频数据2音频转码程序结构与函数分析

4第5章无损数据压缩算法算术编码、行程编码; 词典编码算法基本思想、LZ77算法、LZSS算法、LZ78算法、LZW算法算术编码; LZ78算法、LZW算法2信息熵编码的概念、香农范诺编码、赫夫曼编码

5第6章数字图像基础数字图像的基本概念; RGB、RGBA、HSV和YUV彩色模型; 真彩图像、伪彩图像; BMP图像格式HSV模型、YUV模型; BMP图像格式分析2CMYK模型; GIF图像格式分析; 图像压缩标准JPEG

6第7章图像处理与应用程序设计位图显示基本程序; 基于像素的位图操作,倒立与正立显示、分量图像显示、灰度图像显示; 几个典型的图像处理算法,滤波、浮雕滤镜、图像融合; 水波纹模拟程序实现图像的倒立、正立显示; 高斯滤波; 水波纹模拟程序实现4相关数据结构; 图形图像开发包、SetPixel函数、水波纹模拟算法原理

7第8章数字视频基础模拟视频,扫描、电视制式、模拟电视信号的类型; 模拟视频的数字化,数字视频的采样格式; YUV的取值、YCbCr转RGB; YUV文件显示程序设计数字视频的采样格式; YUV的取值、YCbCr转RGB2YUV视频的存储格式; 颜色空间和色差采样率的变换

8第9章视频应用程序设计Media Foundation视频播放程序设计; 基于YUV文件显示程序的淡入淡出特效; 字幕与图标添加4视频捕获程序; 运动对象检测与跟踪原理及应用程序设计

9第10章数字视频编码原理与标准视频编码原理、编码算法的基本框架; 运动搜索算法,搜索起点的选择、匹配准则; H.261、MPEG1、MPEG4运动搜索算法; MPEG42其他H.26x系列标准、MPEG系列标准; 视频编码标准的应用和性能比较

续表

序号章节课堂讲授重点难点学时课外自学

10第11章网络多媒体基础计算机网络、分布式系统、分布式多媒体系统; IP多播概述; RTP协议、RTCP协议; 流媒体技术的特点、典型流媒体协议分析; 主要流媒体系统简介、流媒体应用系统的组成RTP、RTCP协议; 流媒体协议分析4IGMP协议、IP多播路由协议; 流媒体系统应用举例;  Media Foundation的网络媒体源特性; 视频会议系统

11第12章网络多媒体应用程序设计桌面屏幕图像捕获,桌面图像的网络传输系统设计桌面图像的网络传输系统设计2WinSock编程基础,C/S模型、客户端设计、服务器设计

12实验1流媒体应用系统视频点播系统,视频广播系统编码器与视频服务器的连接; 视频播放HTML页面设计; 编码器、Web服务器配置2

13实验2视频会议系统视频会议终端、MCU组网; 会议呼叫; 会议管理; 系统结构会议管理、MCU的应用2

合计32

致谢

首先,作者要衷心感谢中南大学为本人提供的教学与科研平台。中南大学是一所重视科研与教学,并注意营造良好教学氛围的学校。通过“精品教材”“开放式精品示范课堂”“教育教学综合改革”等项目,学校为广大教师开展教学研究和开发教学资源创造了有利条件。

其次,作者要感谢本校2012、2013级计算机科学与技术、物联网工程、信息安全和2013级软件工程专业的大量本科生,本书的初稿首先在他们当中试用。在两年多的时间里,作者受到了很多学生的热情鼓励并获得了非常有帮助的意见,特别是一些学生帮助作者查找各类编写错误,使作者感受到一种十分有效的群智方法。

作者在创作本书的过程中,参考了一些国内外教材或专著。清华大学林福宗老师编写的《多媒体技术教程》被很多高校采用,本人实际上也是从采用林老师的教材开始多媒体技术专业课程教学的。在此,特别向林福宗老师致以敬意。本书的第2章引用了微软公司的相关技术资料,并且全部程序都是基于Visual Studio设计的。众所周知,微软公司是全球领先的信息技术公司,其致力于软件创新的精神值得钦佩。

最后,作者要衷心感谢清华大学出版社的工作人员,他们热情、周到和细致的工作确保了本书的编辑出版质量。

作者(Email: djhuang@csu.edu.cn)2017年6月于长沙