硕士论文-实时视频系统的设计与实现_第1页
硕士论文-实时视频系统的设计与实现_第2页
硕士论文-实时视频系统的设计与实现_第3页
硕士论文-实时视频系统的设计与实现_第4页
硕士论文-实时视频系统的设计与实现_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

分类号 分类号 TP31TP31 U U D D C C D10621 408 2016 1411 0D10621 408 2016 1411 0 密密 级 公级 公 开开 编编 号 号 20120511712012051171 学学 位位 论论 文文 实时视频系统的设计与实现实时视频系统的设计与实现 论文作者姓名 论文作者姓名 申请学位专业 申请学位专业 申请学位类别 申请学位类别 指指导导教教师师姓姓名名 职职称称 论文提交日期 论文提交日期 实时视频系统的设计与实现实时视频系统的设计与实现 摘摘 要要 随着互联网时代的不断发展 移动终端在社会的应用不断扩大 传统的 PC 端实时视频通讯变得笨重而不方便 极大的降低了人们的工作效率 为了缓解 这一情况 本文采用基于软件工程的设计 分析方法 将传统的 PC 端实时视 频通讯移植到 Android 端 由于条件限制 此系统的视频是通过 PC 端的视频摄像头进行采集 通过 本地服务器的数据传送 到达 Android 手机端进行实时的视频播放 在软件平 台方面 是基于 visual studio2013 进行 Win7 上 C 的开发 基于 eclipse 和 Android SDK 进行 Java 服务器开发和 Android 端的开发 在技术层面 本系统 在 PC 端使用了 FFmpeg 这种稳定性较强 运用范围比较广的开源三方库进行 PC 端的视频采集和视频转码 在服务器端 运用 socket 套接字和固定端口监听 实现客户端的数据监听和数据传输 在 Android 端将 FFmpeg 开源库进行编译 封装成动态库 使用 Jni 实现 C 和 Java 端的数据通信和接口调用 本系统将运 算量较大的视频采集和视频编解码用 C 语言来进行处理 提高了效率 将服务 器搭建 数据传输 数据同步以及界面交互这种较为繁琐的工作用 Java 来进行 处理 很好的利用了 C 语言面向过程的高效性和 Java 面向对象友好的交互性 使得系统即拥有较好的视频处理性能 又具有友好的人机交互 本系统实现了 对视频的实时处理和传输 使人们脱离了传统实时视频通讯的地理位置现在 可以更加灵活的进行视频接收 查看 使人们的生活变得更加便捷 极大的提 高了人们的工作效率 关键词关键词 实时视频 视频编解码 FFmpeg Jni Android socket Design and Implementation of Real time video system Abstract With the continuous development of the Internet age expanding the application of mobile terminals in society the traditional PC real time video communication becomes heavy and inconvenient greatly reduces the productivity In order to alleviate the situation in this paper based on the design of software engineering analysis methods the traditional PC real time video communication transplantation to Android Because of the constraints the video of this system is through the acquisition of the video camera on the PC through the local server data transfer reach the Android mobile terminal real time video playback In the aspect of software platform which is based on visual studio2013 c development on Windows 7 based on eclipse and the Android SDK for Java server development and the development on Android At the technical level the system stability in PC using FFmpeg this strong using range is wide open source library for the PC video capture and video transcoding On the server side use socket socket and fixed ports for the client s data to monitor and data transmission On Android will FFmpeg open source libraries to compile encapsulated into a dynamic library using Jni to realize the data communication and interface call on C and Java This system will be the computation of the larger video capture and video codec to use C language to undertake processing improve the efficiency The server build interface interaction data transmission data synchronization and the more tedious work to use Java for processing Good use of the C language to process efficiency and Java object oriented friendly interactive Is makes the system possess better performance of video processing but also has a friendly human computer interaction This system has realized the real time processing and transmission of video makes people away from the traditional real time video communication location now can be video receiving a more flexible view make people s life become more convenient greatly improved the work efficiency of people Key words Real time video video encode and decode FFmpeg Jni Android socket 目目 录录 论文总页数 34 页 1引言 1 1 1课题背景 1 1 2国内外研究现状 1 1 2 1视频技术发展现状 2 1 2 2视频技术应用现状 2 1 2 3本系统的相关技术现状 3 1 2 4本系统的应用现状 3 1 3本课题研究的意义 4 1 4本课题的研究方案 4 1 4 1前人已实现方案 4 1 4 2本系统使用方案 5 1 4 3方案的确定及其优缺点 6 1 5全文结构 6 2系统概要设计 7 2 1系统框架结构 7 2 2系统需求分析 8 2 2 1系统功能模块 8 2 2 2系统数据传输 10 2 2 3系统性能需求 10 2 3系统重点技术简介 11 2 4本章小结 13 3系统详细设计 13 3 1视频采集技术实现方法 13 3 1 1摄像头驱动及 FFmpeg 平台搭建 13 3 1 2PC 端获取视频解码显示 14 3 1 3视频编码存储 17 3 1 4视频缓存传输 20 3 2服务器传输技术实现方法 22 3 2 1客户端数据监听 22 3 2 2数据传输和缓存处理 23 3 3移动终端视频处理技术实现方法 23 3 3 1数据接收和存储 23 第 1 页 共 39 页 3 3 2视频数据解码 24 3 3 3界面设计及视频播放 24 3 4本章小结 25 4特殊问题及解决方法 25 4 1动态库运用问题 25 4 2C 与 JAVA数据通信问题 26 4 3数据传输同步问题 26 4 4编码帧频和参数设置问题 27 4 5本章小结 28 5系统测试分析 28 5 1功能模块测试概述 28 5 2系统 PC 端测试 28 5 3系统服务器测试 29 5 4系统移动终端测试 29 5 5性能测试分析 29 5 6本章小结 30 结 束 语 31 参考文献 32 致 谢 33 声 明 34 第 1 页 共 39 页 1 1 引言引言 1 11 1 课题背景课题背景 即时通讯 Instant Messaging 是目前 Internet 上最为流行的通讯方式 而 视频信息又是人们最直观的理解的信息 而随着移动终端的不断发展 移动应 用在人们生活中的普及 使得实时视频通讯有了发展到移动终端设备上的必要 性 而比较传统的视频实时通讯基本上都是建立在摄像头和 PC 电脑之间 这 极大的约束了人们的活动范围 而且占用一台电脑资源 不能做其他事物 使 得资源极其浪费 而且这种视频的通行方式仅仅限于短距离之间 不能做到远 距离监控 使得视频传输的地域收到了极大的限制 这就可能直接导致人们对 于所关心的事物由于各种原因而不能达到实时关注的情况 而本系统的设计极 大的弥补这一方面的不足 既能实时的通过视频查看所关心的重要事物 又不 用局限于地域和设备限制 极大提高了人们工作效率 1 21 2 国内外研究现状国内外研究现状 视频技术在九十年代就已经有了初步的发展 对视频和音频进行编解码 从最开始 ITU T 颁布的 H 261 到现在的 H 264 以及 MPEG 系列 都有了较为成 熟的发展 随着近几年来的网络通讯越发发达 IP 化成为了网络发展的主流 也使得视频音频的编解码协议发展变得更为重要 一些对视频音频进行处理的 软件和开源项目的需求也变得急迫 而现在应用比较广泛和较为成熟的开源视 频编解码的三方库就是 FFmpeg 它提供了录制 转换及流化音视频的完整解决 方案 而且支持多种编码解码方案 在这套三方库推出以来 已经有多个版本 使用的人也非常多 其对于音视频处理的技术也是相当成熟 而且有许多的播 放器都是采用了基于 FFmpeg 的库进行开发的 比如 VLC Mplayer HandBrake Google Chrome DirectShow 和 ffdshow 等等 由 于 FFmpeg 是完全开源的项目 而且是在遵守 LGPL GPL 的协议下发布的 因 此也就因为某些软件使用或者包含了 FFmpeg 对应的源码 但是并没有遵守 LGPL GPL 协议对其软件进行开源化 而产生了 FFmpeg 耻辱柱 Hall of shame 其中包括韩国名软 KMPlayer 以及国内的暴风影音 QQ 影音等软件 也由此 引发了许多学者对于开源的基本规则和开发者如何尊重开源作者的一些思考 从这些方面 也可以看出 FFmpeg 在音视频软件行业以及计算机行业的一定影 响力 其中 VLC 是基于它而制作出来的一款比较成功的开源软件 和 FFmpeg 一样 VLC 也支持众多音视频解码器及档案格式 并支持 DVD VCD 及各类 串流协定 而且 VLC 也在此基础上进行了开发 能够作为 unicast 或 multicast 的串流服务器在 IP4 或 IP6 高速网络下的连接和使用 后续版本还提供了基于 Mozilla 和 Active X 的插件 使其在 Mozilla 和 IE 浏览器中也能够正常的显示 第 2 页 共 39 页 而且 VLC 还能够播放那些并没有下载完整的视频文件 这也是它的一个非常好 而强大的功能 而进年来的移动终端的流行 也推出了 FFmpeg 对应的移植方 法 应用技术也相对成熟 下面就是对视频技术相应的模块进行细节的讲解 1 2 11 2 1 视频技术发展现状视频技术发展现状 网络时代的不断发展 网速的不断提升 使得视频技术也得到了不断的提 升和加强 从最起初的 H 261 的颁布到现在的 MPEG 2 视频通讯技术在不断 的完善 视频通讯的相关协议的不断成熟 以及编码 信息压缩技术和宽带技 术的不断普及深化发展 使得现在的视频通讯技术已经达到了一个较为成熟的 阶段 不管是在视频采集压缩处理 视频监控 视频电话 以及视频会议 都 能达到稳定的通讯性能 目前的视频技术发展方向是更加高清 更加现实以及 数字转换 也就是高清视频的处理 虚拟现实的技术发展以及视频数字化处理 和信息提取这一方面的技术发展 高清视频技术的发展多为高清 720p HD 和全高清 1080P Full HD 类型的摄 像头获取的视频数据 传输的帧频为 25 帧 秒 通常在经过 H 264 或者 MPEG4 等不同编码格式的压缩处理下进行传输 码率一般是在 4 20MB S 一般高清视 频的视频数据量在每小时 2 10G 之间 当然将这些数据进行下载存储播放 并 不是什么太大的难题 但是如果要将这是数据进行实时传输的话 如此大量的 数据 在存储 网络环境 系统稳定性等各个方面都会受到巨大的挑战 这也 算是现在高清视频通话 高清视频会议 以及其他高清视频实时通讯的一个重 难点所在 视频数字化和信息提起主要是将视屏中的数据 或者是某个关键性的点进 行信息的提起 转化成可以处理的数字信息 这也就是现在发展比较火热的智 能视频分析技术 其中主要发展的形成的应用有 目标移动轨迹跟踪 目标移 动范围监测 目标移动方向监测 静态物体监测 特殊人体行为监测 人脸识 别 数量统计以及视频图像质量诊断等等 这些更多的是应用于嵌入式视频处 理的产品 以算法 结构 硬件的优化来提高视频信息的处理 尽量使其更加 自动化 智能化 能更加快捷准确的获取某些有效信息 但是这些技术的发展 还不够成熟和稳定 都有一定条件的限制 对于算法 前端设备的依赖性比较 大 目前也是处于研发优化状态 1 2 2 视频技术应用现状视频技术应用现状 视频技术的应用在我们生活中可谓无处不见 小到平常的电影电视以及身 边的摄像监控 大到天气预报卫星云图 可以说视频技术的应用几乎涉及各个 领域 下面就列举几个常见的领域 日常生活中的视频应用 莫过于在手机上 电视上或者电脑上观看电视或 第 3 页 共 39 页 者电影 或者说通过这些设备来进行视频通话 网络直播这类实时视频通讯的 应用 这类只是处理好视频清晰度和网络带宽的问题 能够清晰流畅的观看视 频或者进行视频通话即可 随着带宽的发展 网络技术的不断提升 这一技术 也已经发展成熟 其次常见的就是医疗设备的视频图像处理 这类主要还是针 对核磁共振 超声波图像这一类的医学图像处理 当然这种技术也发展的较为 成熟 已经应用到大多数的医院 但医学类的视频图像处理依旧还在发展中 使其能够更加准清晰的判断病情 还有一类是在军事国防方面的应用 当然这 些应用就对视频信息的处理要求更加准确 更加智能化 速度更快 安全性更 强 军事领域的应用就跟加的复杂 技术难度也就越大 1 2 3 本系统的相关技术现状本系统的相关技术现状 本系统的技术主要是用到视频的编码与解码 视频数据的传输 视频数据 在移动终端的编解码以及播放 本系统视频编解码是基于 FFmpeg 的三方库 进行编解码的 现在使用的 FFmpeg 已经到达了 3 0 的版本 而且有基于 win 平台和基于 Linux 平台两个版 本 官方还有对于的动态库 开发包以及源码下载 几乎都能够满足开发者的 基本需求 对于 FFmpeg 的平台移植 也有相应的简介和平台搭建方法 而且 也有许多人在此基础上进行过开发 有相对成熟的经验 不足的是 网上可利 用的资源不多 许多问题的研究并不见得深入 对于 PC 端的视频数据获取和播放 使用的是 SDL 的三方库 现在官方也 发布 2 0 版本 对于老式的 vfw 摄像头驱动和现在较多的 directshow 都有较好 的支持 网络上也有相应的基础应用的示例 包含对应的事件机制和缓冲刷新 机制 能够基本满足摄像头视频获取相应的功能 视频数据的传输是基于 TCP 协议的 socket 套接字的一个传输方式 这种方 式适用于建立长时间的连接 而且数据传输相对有保证 通常是应用于即时传 输 这类数据传输协议和传输方法 已经有了较成熟的示例 但是要根据不同 的应用来加以更改 理解对于流数据的处理机制 才能更好的应用 手机终端视频解码的处理和播放 是基于 FFmpeg 的方式进行 由于 Android 平台近年来才兴起 对于 FFmpeg 的移植有先例 但是并不是完全的成 熟 有许多的问题有待解决 作为开发者 这一方面网上的资源可谓也少了许 多 至于 Android 前端界面的编写 现在已经是发展到了相当成熟的阶段 几 乎能够满足所有应用的一种移植所需的前端设计 1 2 4 本系统的应用现状本系统的应用现状 本系统的主要应用更加趋向于视频监控方向 由于采集端是基于 PC 的摄 像头 可能要真正进行应用的话 还需要一定的改进 目前基于 Android 移动 第 4 页 共 39 页 终端的视频监控还不常见 大多数都是基于 PC 的一个视频监控 并没有将视 屏传输到服务器 与移动终端进行一定的交互 将视屏实时传输到移动终端 而大多数的摄像头的开发精力主要是集中在智能视频监控方面 以及高清视频 监控方面 少有对移动终端方面的视频监控进行研发 本系统研发成功后 在 以后的智能家居这方面 对于私人的视频监控的应用有着广阔的空间 特别是 在人们外出时 依旧可以在有网络的情况下 对家中的一些情况进行监视和查 看 例如 防止有陌生人物侵入自己的房间 家中小孩遇到的突发情况 配合 红外感应及时查看和预防家中可能出现的火灾 若摄像头的安装方便 还可以 根据自己的需求对于一些需要观察监视的物品进行实时查看 1 31 3本课题研究的意义本课题研究的意义 本系统的研究 致力于将视频监控变得跟加方便化 人性化 在于传统意 义上的 PC 视频监控上 增加了服务器存储 以免重要的视频信息遗漏 丢失 而且可以同步实时传输到对应的移动终端 够跟加方便人们出行时对于房屋 车库或者自己所重视的东西进行一个实时视频查看的效果 能够使人们更加快 捷的对危险情况进行反应和处理 保障人们财产和生命安全 与此同时 又不 会极大的约束人们的生活节奏和工作活动 与智能家居进行配合合作 在智能 家居进行一些数字化的检测过后 由视频数据来进行更加准确的判定 例如在 有人进入你家中的时候 在智能家居感应到时 你可以通过视频数据来判定是 否是你的家人 还是外来入侵者 这些与此相近的一系列的应用能更加方便人 们的生活 保障人们的财产 1 41 4 本课题的研究本课题的研究方案方案 本系统在设计之前 对设计方案有过初始简单的了解和建立 FFmpeg 是个 成熟稳定的三方开源库 而且支持摄像头视频提取功能 并且可以通过 Jni 与 Java 通讯 能很好的移植到 Android 上 总体来说 这个方案的可行性更加高 而且和实际的需求有很高程度上的契合度 也依旧有一些缺陷和不足有待改进 和优化 1 4 1 前人已实现方案前人已实现方案 Anychat 即时通讯平台 是一套基于相对成熟的即时通讯视频解决方案 而且可以更好的融合不同平台之间的通讯 针对的主要是视频网络视频聊天和 视频游戏一类的需求开发的一套实现方案 其中也是基于第三方的开源技术进 行开发的 其中包含了 FFmpeg libvpx libspeex webrtc 在视频压缩编解码 方面是基于 H 264 的视频编码标准 AAC 音频编码标准和 P2P 技术 其中包含 了音视频处理模块 流媒体管理模块 流媒体播放模块以及 P2P 网络模块 对 于底层的硬件操作比如音视频采集 播放和流媒体处理比如音视频的编码解码 第 5 页 共 39 页 等非常专业的技术都进行了封装 只为上层提供了对应的 API 接口 方便开发 者进行调用 但是由于此系统主要是针对上层进行开发 重点突出的是跨平台 更多用于大型的视频实时通讯的一种解决方案 并且它对于底层的操作都进行 了封装 在本系统的开发中自由度受到了限制 另一种实现方案相对与 anychat 来说 没有那么多现成的功能较为丰富的 API 接口 但是提供了更多在基本音视频处理方面的 API 接口 比如图像缩放 具体实现 每一帧视频数据的提取处理一类的 具体是用 FFmpeg 获取视频并 进行压缩转码 自行编码服务器 进行数据实时传输 移动终端基于 Android 或者 iOS 对 Ffmpeg 又进行平台移植 自己编码实现视频数据的解码 并用自 带的视频显示控件进行播放 这一种实现方式是在网上看到的一些分块的设计 自行组合而成的 这个方案只是有人提出可以实现 但是并没有相关的源码 但是 FFmpeg 对视频数据的获取 编码压缩技术基本已经成熟 而且也有相对 应参考文献 关于 FFmpeg 在移动平台的移植技术也有先例 但是技术还并不 成熟 这里面也有关于 C 和 Java 之间的数据传输问题 大多使用的都是 Jni 进 行接口调用 也有许多的参考资源 两种方案比较 anychat 开发更为简单快捷 比如使用 anychat 进行视频摄 像头调用 仅仅需要一个函数 BRAC SetVideoPos 就可以启用摄像头 里面已 近具体实现了摄像头类型检测 驱动监测和摄像头开启等工作 其他的功能也 相对于 FFmpeg 来说 又进行了丰富和集成 而且 anychat 还拥有一套的 sdk 可 供不同平台开发 免去了跨平台的移植麻烦 也提供了对应的服务器开发方案 用此来搭建服务器 但是 anychat 比较 FFmpeg 封装的较多 遇到问题不能直 接看源码实现 而且它支持的音视频解码器比 FFmpeg 少了许多 这就使得使 用 anychat 的自由度少了许多 其实 anychat 也就是基于 FFmpeg 进行开发的 并且相比 FFmpeg 开发文档和相关开发资料也少了许多 基于自由度 代码开 放度 开发资料的丰富程度选择使用 FFmpeg 对应的方案 1 4 2 本系统使用方案本系统使用方案 本系统由于相对接近底层 也就并没有采用第一种 Anychat 的方案 Anychat 是一种已经实现和封装好的即时通讯平台 更加针对的是上层开发 也就采用了第二种实现方案 本系统也在此基础上进行细节性的更改 使其更 加适合本项目的开发 本系统的方案具体为使用 FFmpeg 来对视频数据进行获取 编码 压缩 由于此三方库相对比较成熟 而且功能强大 网上资源较为丰富 但是想要灵 活运用比较困难 使用 SDL 三方库来对视频摄像头的硬件驱动进行检测 能够 有效的运行对应的驱动来进行视频数据的获取 并且对已经解码好的视频数据 第 6 页 共 39 页 进行播放 由于 SDL 有消息机制以及缓存刷新机制 对于视频的播放相对也比 较流畅 对于基本的摄像头驱动也能很好的支持 是相对理想的选择 在数据 传输方面 使用的是基于 TCP 协议的 Socket 套接字来进行数据是实时传输 这 种方式适用于建立长时间的连接 而且数据传输相对有保证 通常是应用于即 时传输 由于 C 和 Java 之间要建立通讯连接 故采用 Jni 技术来进行接口的调 用 这种调用方式能够很好的支持字节 数组 对象等基本数据的参数传递和 返回 也能实现 C 对 Java 函数的调用 以及回调 由于是基于 FFmpeg 的视频 压缩处理 在 Android 移动终端使用的也是基于 FFmpeg 的三方库视频解码 和 Android 自带的视频播放控件 1 4 3 方案的确定及其优缺点方案的确定及其优缺点 优点 本系统的这套方案 每一个部分清晰明了 恰到好处的实现了对应 的功能 FFmpeg 是专门针对视频数据进行处理的 支持许多的编解码方案 性 能稳定 而且基于 C 有更高的效率 SDL Simple DirectMedia Layer 也是个简单 的三方库 专门针对视频图像和音频图像的输出 而且能够对摄像头驱动进行 有效的检测和调用 对应的服务器使用的是 Socket 套接字 相对于 URL 和 webserver 这类的通讯方式 这种方式更加适合于长连接和即时通讯 而且数据 也有所保障 基于 Android 的移动终端 现在 Android 手机的使用也很广泛 开发技术也相对成熟 支持很多功能的实现 是个较为方便和成熟的平台 缺点 由于运用了 Jni 对 Native 进行了调用 在系统的稳定性和安全性上 并没有那么可靠 1 51 5 全文结构全文结构 第一章 引言部分 大致介绍了本系统的课题背景 现阶段国内外的研究 现状 本系统实现的方案选择以及其优缺点 第二章 系统概要设计 简单介绍了本系统的结构框架 展示系统结构框 架图 以及系统所需求的结构 功能 性能等各方面的设计简洁 第三章 系统详细设计 是本论文的重点部分 详细的介绍了本系统的每 个部分的详细设计 设计框架结构 数据详细设计说明等 其中附有详细的结 构图和对应的关键源程序代码 第四章 是在本系统的开发过程中所遇到的一些比较有代表性的问题以及 其解决方案 当然也有尚未解决的问题 第五章 是对本系统的测试分析 主要是在本系统开发中的一些测试 及 开发完成后完善的一些测试 本章小结 此章的重点就是在系统的总体简介之前对其课题背景的一个描 述 和对当前相关技术的一个大致了解 这其中大多数是从书籍 网络上了解 第 7 页 共 39 页 的知识 对于本系统的大体设计有着很大的帮助 除此之外 还学习了其他与 视频通讯相关的知识 有助于其他开发者的参考 也帮助我更加完善和改进自 己的设计 2 2 系统概要设计系统概要设计 2 12 1 系统框架结构系统框架结构 系统框架结构主要是通过 PC 采集视频 由服务器进行同步传输 再通过 Android 手机端进行播放 其结构框图如下图 2 1 服务器确认数据接收并传输 PC端获取摄像头数据并编码 手机端播发视频数据 显示获取的数据 连接成功后将数据 传输至服务器 第一次连接服务器 确认移动终端与服 务器的连接 连接成功后将数 据接收到移动终 端 第一次连接服务器 确认PC端与服务器 的连接 手机端接收视频数据解码 图 1 系统框架结构图 下面是与之对应的功能结构框架图 第 8 页 共 39 页 视频实时传输 服务器 Android PC端 视频数据获取 视频传输 摄像头启动 视频数据解码 视频播放 数据接收 客户端监测连接 数据传输 服务器启动 2 系统功能机构图 2 22 2 系统需求分析系统需求分析 本小结主要是针对系统的各个方面的性能进行一个相关的阐述 对于各个 模块功能的大致需求 本系统的运行环境硬件需求 win7 的 PC 电脑一台 支持 directShow 的视 频摄像头 并且能够正常的工作 PC 端有对应的无线网卡 能够产生一个良好 的局域网 本系统所需的软件和其他条件 使用本软件的人能够熟练的运用 PC 电脑和 Android 手机 对于网络也要有一方面的了解 在本系统运行之前 要 对系统的局域网 IP 进行查看 能够获取到对应客户端的局域网 IP 地址 而且 本系统运行时 确认系统没有其他软件对 9876 自定义端口 可更改 端口进行 占用 如果有占用 要先解除占用 本系统才能够正常运行 移动终端的 Android 手机要基于 4 0 平台以上 能够正常工作的手机 并且要先安装本系统 对应的 Android 客户端软件 2 2 1 系统功能模块系统功能模块 本系统的功能需求 是实现在 PC 端的数据采集和数据编解码 并且在客 户端进行显示 获取到数据编码压缩完毕后连接到服务器 进行数据的同步传 输 在移动终端接收到数据过后进行解码 而后由手机端进行同步播放 在此分别给出三个大模块对应的结构框架图 第 9 页 共 39 页 显示器 PC主机 获取buffer数据 传输到服务器 与服务器建立连 接 服务器 监测摄像头 型号 启动 摄像头 数据Buffer 获取视频数据 进行编码缓存 对于视频数 据进行播放 线程二 线程一 图 3 PC 端结构框架图 启动服务器 并初始化 PC端 移动终端 等待客户端 的连接 新建客户端进程并 判断客户端来源 新建读进程新建写进程 读取PC端发 送来的数据 到Buffer中 将Buffer中 的数据写入 到移动终端 连接服务器连接服务器 PC端移动终端 数据Buffer 图 4 服务器结构图 第 10 页 共 39 页 服务器 移动终端启 动 连接服务器 连接成功 获取服务器 数据 将数据存入 Buffer 数据Buffer 初始化播放 控件 读取Buffer中 的数据播放 连接失败 连接成功 图 5 移动终端结构框架图 2 2 2 系统数据传输系统数据传输 有关数据传输的需求 主要是针对数据传输的同步性和数据传输的正确性 从数据的获取到数据最终的播放 都尽量做到数据的正确和同步 数据获取阶段 Buffer 的创建是在 Java 代码里面完成的 通过 Jni 的调用 将其对象的引用传输到 C 代码里 用于存储从摄像头你获取的视频数据 如果 存储完成 则对标志位置位 以此来通知 Java 代码里的数据传输线程 可以读 取数据 Buffer 里的数据来进行传输 在数据传输阶段 在服务器与 PC 客户端以及移动终端的客户端建立连接 完成以后 服务器读线程监听 PC 端传输过来的数据 并且让写进程等待 当 PC 端数据传输到服务器后 存储到建立的数据 Buffer 中 解除写进程等待 让 读进程进行等待 此时写进程开始讲数据 Buffer 中的数据写入到移动终端 完 成后解除读进程等待 在移动终端数据接收时 新建一个线程进行服务器连接 获取视频数据 Buffer 当数据缓冲完成过后 传输到 FFmpeg 对应的动态库中进行解码 由相 应的视频控件来进行播放 同样 在数据 Buffer 不同的读写操作时 要保证进 程间的互斥 2 2 3 系统性能需求系统性能需求 系统性能需求主要集中的方面是数据传输的速度 和视频播放的效果 第 11 页 共 39 页 在数据传输方面 由于在采集的时候采用的是延迟 40 毫秒采集一次视频数 据 也就是得到的视频数据为 25 帧频 每帧的数据在没有压缩的时候是 460800 个字节 也就是 450kb 若不进行压缩就传输数据 那么一秒钟传输的 数据在 10M 左右 一般的带宽都无法承受这样的数据量 因此只能采用 H264 的压缩方式来进行压缩 一般的 H264 的压缩比在 100 1 左右 折算下来每秒钟 传输的数据为 100kb 左右 这样的数据量在一般的网络宽带都能够有效的支持 而在这 40 秒获取到数据时 要同步传输到对应的手机端并且能够播放出来 其 中包括视频数据解码 传输 在服务器中进行读取各个方面的操作 由于从视 频获取 解码 编码 传输 数据获取 解码播放都是一个线性操作 加上网 络的传输不稳定因素 因此要保证在通讯连接建立过后不掉帧的难度很大 但 是在范围程度内的掉帧不影响播放效果是可以接受的 在第三章中会对 H264 的编码结构和其中的 I P 帧进行详解 视频播放效果质量主要是在数据编码和数据传输的正确性方面 由于视频 采集的时候 得到的是 YUV 数据 要转码成为 H264 编码的格式 进行压缩方 便传输和播放 但是在编码时 要注意时间的控制 以及编码方式的控制 要 不就会出现编码过后与原来的帧频不能有效的对应 使得播放过快或者过慢 同样 视频播放的速度也取决于数据传输的速度 数据传输的速度不能有效满 足 实时播放的效果也就不能实现 其中在传输的时候 Java 函数的选择也是 很重要的 本系统采用的是 inputoustream 和 outputstream 对应的字节流输入输 出函数来保证数据传输的正确性 传输的同步控制合理也是保证数据传输正确 性的一个重要方面 2 32 3 系统重点技术简介系统重点技术简介 本节主要是针对本系统的重点一些技术进行简介 其中主要涉及的重点技 术有 FFmpeg 编解码 Jni 运用 SDL 视频播放 socket 套接字使用 FFmpeg 编解码 这个三方库是本系统的核心 使用它来完成了数据的获取 视频数据的编码压缩这些核心功能 下面是大致的一个编解码步骤 1 其中数据获取是先使用 av register all 进行初始化 这个函数是所有模 块初始化 也可以用对应模块的函数进行初始化 2 使用 avformat find stream info 函数获取对应流媒体的各个方面的信息 具体会在下面详解 3 avcodec open2 初始化音视频编解码器 再使用 av read frame 读取帧频 数据 4 并用 avcodec decode video2 解码一帧视频数据 输入一个压缩编码的 结构体 AVPacket 第 12 页 共 39 页 5 avcodec decode video2 函数返回成功后 我们就可以通过这个 AVPacket 结构体获取对应的视频数据了 FFmpeg 的视频编解码的库都主要集中于 libavcodec 对应的文件夹下 其中包含 了大部分对于音视频的编解码函数 下面是就基本的 FFmpeg 编解码的流程图 图 6 音视频编解码流程图 Jni 其实就是一个桥梁 连接 Java 和 C 其中主要的就是一个动态库的生成 对应函数的编写格式 和传参方式 其中大致实现步骤如下 1 编写 Java 类 带有 native 的声明方法 2 使用 Javah 命令生成对应的类的头文件 3 使用 C C 实现与之对应的本地方法 4 使用 vs2013 将你的 C C 文件编译生成对应的动态链接库 5 配置对应的环境变量 使 Java 能够导入对应的动态链接库 在这些方法实现的过程中 要使用到对应的参数调用 和函数回调 在后面的 详解中会详细说明 SDL 在本系统的主要作用是对系统摄像头的驱动监测 和摄像头启动 主 要包括以下几步 1 监测摄像头驱动信息 第 13 页 共 39 页 2 使用对应的摄像头驱动启动摄像头 3 SDL CreateWindow 函数创建对应的视频播放窗口 4 使用 SDL Texture 函数存储一帧的像素数据 5 使用 SDL UpdateYUVTexture 更新纹理 显示一帧的视频数据 这里介绍的也是 SDL 使用的大致的几个常用和关键的几个函数和步骤 后面还 会对其进行详细的介绍 Socket 套接字使用相对比较简单 要很好的控制和利用也要好好学习 本 系统中的服务器中的主要步骤如下 1 服务器申请端口 创建 serversocket 对象 2 使用 accept 函数进行客户端的监听 3 客户端使用 socket 套接字进行连接 4 建立连接过后 建立一个实例化的 socket 套接字 5 使用 socket 类中的 inputstream 和 outputstream 进行字节流的传输 Socket 套接字是基于 TCP 的通讯协议 在 Java 中写的 对于底层的具体通讯方 式没有进行详细的了解 后面会对其具体详情进行介绍 2 42 4 本章小结本章小结 本章对于本系统的大致框架结构 每一部分的框架结构有了一个大致的了 解 对应其相关的技术以及其中重点或者关键的部分也有相关的提及 对于本 系统的数据传输质量 速度方面进行了简单的介绍 也分析了本系统影响视频 播放的各个方面做了一些简介 本章的目的只是让读者了解本系统的大致结构 其中具体的实现方法以及细节 会在下一章节进行说明 3 3 系统详细设计系统详细设计 3 13 1 视频采集技术实现方法视频采集技术实现方法 这里介绍的是 PC 端视频采集技术的具体实现方法 以及对应的 FFmpeg 进 行编解码的具体实现方式 这也是本系统的核心重点所在 3 1 1 摄像头驱动及摄像头驱动及 FFmpeg 平台搭建平台搭建 视频摄像头视频获取 主要是针对摄像头的启动 和运行进行说明 由于 视频获取和后面的视频显示是在一起的 就放在下面讲解 本系统基于的 PC 平台是 win7 的平台 win 平台使用的摄像头驱动有老版 本的 vfw video for Windows 对应的封装库 这个基本已经不用了 也有现 在使用较为广泛的是基于 DirectShow 来驱动摄像头的 而本系统进行检测是基 于 DirectShow 的摄像头 因此采用了 FFmpeg 自带的摄像头驱动方式来对摄像 头进行驱动 主要的函数是 av find input format 获取系统摄像头设备 其中参 数是对应你摄像头的驱动类型 而后使用 avformat open input 函数就能打开对 第 14 页 共 39 页 应摄像头 获取到里面对应的视频流数据 但是此函数里的参数需要你事先获 得你摄像头使用的设备驱动名称 这里获取摄像头驱动信息的方式有一下几种 1 使用 FFmpeg 自带的命令进行查看 查看摄像头设备信息的命令为 ffmpeg list devices true f dshow i dummy 2 使用代码在控制台打印出对应的设备信息主要使用函数 av dict set 3 使用一些软件来实现这个功能 比如 DirectShow 的调试工具 GraphEdit 这里使用到的 FFmpeg 函数并不多 但是需要事先在 win7 平台下基于 vs2013 进行 FFmpeg 的平台搭建 就在此进行介绍 下面只搭建平台的步骤 1 官网上下载对应 FFmpeg 在 win 平台下编译的包 根据你系统的平台来 选择 2 在 vs 中新建控制台工程 并设置动态链接库路径 也可以使用代码来 实现动态库的连接 3 将所需要的 dll 文件拷贝到你所见工程当中 4 编写一个测试代码进行测试 成功就完成了 由于后面 Android 也需要 FFmpeg 移植 搭建基于 Android 的 FFmpeg 平台 下面就根据 Android 平台说明一下搭建步骤 1 下载对应的 FFmpeg 源代码 2 建立编译平台 一般在 Linux 下编译 如果你用的是 win 平台 可以使 用模拟 Linux 平台的软件 如 Cygwin 3 编写和修改 configure 文件 和编写 build Android sh 脚本文件 准备进 行编译 如果平台是 win 平台 还要进行其他文件的修改 4 创建普通的 Android 工程 将编译出来的 so 动态库加入对应的 Jni 文件 夹 5 创建对应的含有 native 本地调用程序的类 6 创建对应的头文件 编写对应的 Android mk 文件 7 运行 Android mk 文件 编译生成对应的 so 文件 8 加载对应的 so 动态库 9 进行基本测试 成功完成 以上就是针对摄像头监测和启动以及 FFmpeg 的一些平台搭建的类容 都 是只写出了核心的内容 若要实践还需要多多参考其他资源 3 1 2 PC 端获取视频解码显示端获取视频解码显示 视频的获取工作 主要是由 FFmpeg 完成 而 PC 端的视频数据显示基本由 第 15 页 共 39 页 SDL 完成 这里就分别进行视频数据获取和视频数据显示的详细介绍 下面是对应的视频获取解码的路程图 Start Av register all Av find stream info Avformat open input Avcodec find decoder Avcodec open2 Av read frame Get Packet End Avdodec deco de video2 Video Packet TrueTrue False False Sws scale 图 7 视频解码 这里需要说明的是 视频的获取中也包含了视频解码的过程 从摄像头中 获取的视频数据通过解码成一帧帧的 YUV 数据 传递给 SDL 来进行播放 这 里对部分函数进行说明 1 Av register all 对所有的 FFmpeg 编解码器进行注册 2 Av find stream info 新建 AVStream 的输入码流 这里是对应的摄像 头输入码流 3 avcodec find encoder 查找对应的编码器 4 avcodec open2 打开对应的编码器 5 av read frame 读取一帧的数据到对应的 packet 6 avcodec dencode video2 真正解码码一帧视频 将对应的 packet 里的 数据解码到 AVFrame 里 7 sws scale 对 AVFrame 里的一帧图片进行缩放处理 这里最耗时的两个函数是 avcodec dencode video2 和 sws scale 由于获取 第 16 页 共 39 页 的视频数据格式是 rawdata 数据 在进行解码和图像缩放的时候 在 PC 端的耗 时并不长 两个函数加起来在 3ms 左右 对于这里采集视频使用的是 25 帧 即 40ms 采集一帧 在此的影响不大 图像的缩放函数并没有改变原函数的长 宽 仅仅是改变了数据格式 从 rawdata 变为了 YUV 其中黄色的内容是 SDL2 0 新增加的内容 下面就是针对这一帧帧的数据 SDL 进行播放的流程图 图 8SDL 视频播放流程图 关于 SDL 播放问题 这里主要关注的是两个点 第一 在播放是窗口是否 可拖动 或者其他操作 第二 视频播放的流畅度 如果不流畅如何处理 关 于第一点 本系统使用的是消息缓存机制 即新建一个线程 对窗口的操作进 行消息缓存 并且进行 40ms 的延时来控制视频帧数 而主线程进行消息缓存 的等待 获取到对应的缓存消息 介绍等待 这样处理就能够有一个线程处理 窗口操作消息 不会使窗口一直处于忙碌状态 而且还能够更加准确的控制帧 数 关于第二点 在视频播放不流畅的时候 会弹出 buffer full 的提示 并且将 第 17 页 共 39 页 当时的帧进行舍弃 以保证视频能够正常播放 这种情况在进行窗口移动的过 程中 视频会暂停 就会出现这种情况 但当移动结束后又能正常播放 下面是 PC 端视频获取显示的运行截图 图

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论