


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、移动多媒体方向综合设计报告-2015.01移动多媒体方向综合设计报告PC机Linux即时视频通信系统发送端的多线程优化一、摘要IP 网视频对话发送端关键技术包括视频采集、视频编码、 RTP 打包发送等多个任 务,这些任务所需的主要硬件资源并不相同,可以利用多线程将这些任务并行运行, 以减小视频传输延迟。本课题研究利用 Linux 多线程实现多任务并行运行、减小任务 间等待,并且在安装 Linux 的 PC 机上实现这一过程。二、多线程原理IP 网视频对话发送端关键技术包括视频采集、视频编码、 RTP 打包发送等多个任 务,其中,视频采集主要使用 USB 摄像头设备在应用层调用 capture
2、的 API(call function) 采集单帧图像,视频编码利用开源 H.264 编码库 x.264 对采集到的图像进行压缩编码, 最后调用Linux socket将H.264压缩码流打包并通过PC网卡发送出去,这三个任务主 要使用的硬件资源不同,因此,使用多线程并行运行可减小视频传输延迟。三、方案设计有两种多线程方案, 一是以两个线程并行运行, 将运行较费时的视频采集独立成一 个线程运行,视频编码、 RTP 打包发送合并在一个线程;二是将视频采集、视频编码、 RTP 打包发送分别用一个线程运行。根据老师的建议,先运行两个线程,即使用方案一,在此基础上再进一步实现三个 线程并行运行。本实验
3、仅实现两个线程的多线程,对于三个线程的使用将在第五部分 结果和讨论中进行讨论。由于线程与同进程的其他线程共享除栈以外的其他地址空间, 包括了代码段、 数据 段、全局变量、堆段等,因此,将采集到的图像数据作为线程间的公共数据,在线程 中通过指针对其直接修改及访问。对于图像公共数据,为了保证下一次获取的图像数 据覆盖原来之前,原图像已完成 H.264 的压缩编码处理,因此必须采取措施对数据进 行保护。本实验使用了两种方法实现:1.对图像数据加锁。2.设置同步点方法。3.1 方法一 图像数据加锁为了使数据处理更快,实验使用了三个图像数据空间,x264_picture_t pic_in1,pic_in
4、2,pic_in3;每个图像数据都带有一个 mutex 互斥锁、一个 condition 条件变量以及其他的标志 符,以保护数据和判断数据是否已处理完毕。数据结构如下:Typedef struct picInx264_picture_t pthread_mutex_t pthread_cond_t int unsigned char*pic_in; / 图像指针 pic_mutex; / 互斥锁 pic_cond; / 条件变量 flag;/ 处理完成标志,采集结束置 1,编码结束置 0frmrate; / 帧率int framesize;/ 图像帧大小picIn;其中, x264_pictu
5、re_t *pic_in; 为指向图像数据的指针。 并定义了一个该数据结构的数组, 数组元素的 pic_in 指针分别指向了三个图像数据 空间。struct picIn pic_in_array3;pic_in_array0.pic_in=&pic_in1;pic_in_array1.pic_in=&pic_in2;pic_in_array2.pic_in=&pic_in3; 线程一和线程二的流程图如下:是尼否迫出?获取團像.标 志处理亍解锁否SZ加锁糸件变比等待收到唤耿信巳图3.1.1线程一,获取摄像头图像流程图开始辺好上开始图线程二,H.264压缩编码和网络发送流程图该方法由于使用了三个带
6、锁和条件变量的图像数据,效率较低,处理较慢。下面使 用设置同步点的方法,提高了效率。3.2方法二设置同步点方法使用老师提供的TI的设置同步点的函数,强制对线程一和线程二进行同步,即在 线程一和线程二分别设置同步点,当任一线程到达同步点时,等待另一线程到达同步 点,然后再进行各自操作。实验使用了两个图像数据空间,两个线程各处理一个图像,当线程均到达同步点后, 交换图像指针,因此,不必给图像数据加锁,从而提高了效率。从实验结果看,该方法优于方法一,因而附录 2只贴出此方法的主要代码。 线程一和线程二的流程图如下:图线程一的流程图图线程二的流程图四、结果分析实验以对比了三组图像大小和比特率分别为64
7、0*480和786kb/s、960*720和1200kb/s及1280*720和1982kb/s的图片格式,并且保持摄像头录像的区域相对一致, 以减小其他干扰。4.1每帧的平均处理时间在进入获取摄像头图像的循环之前,获取系统时间作为初始时间,每帧处理和显示 完毕后,再次获取系统时间作为一帧的处理结束时间,每100帧打印一次,得到每100帧的处理时间。并可由此计算出单帧的平均处理时间。每帧平均处理时间计算:由于开始时存在调整摄像头等因素的干扰,所以最初的若干帧存 在误差,计算时忽略前 200帧,以第1200减去第200帧的时间得到1000帧的总处理时间,除 以1000得到每帧的平均处理时间。完整
8、的每100帧处理时间表在附录1显示。方法图片格式每帧平均处理时间ms方法一640*48043.50561960*720101.76421280*720101.3051方法二640*48033.4715960*720101.27561280*720101.1656单线程640*48033.50281960*720101.3821280*720101.3756表不同方法的每帧平均处理时间表由表可以看出,图片格式较小时,多线程效率较单线程差,图片格式较大时,多线 程效率较单线程好,这是由于数据大时,线程二中H.264压缩编码需要的时间长,增加了单线程顺序执行时间,而对于并发运行的并无多大影响。此外,
9、方法一整体上效率比方法二差,大概是方法一使用资源较多,加锁后使得图像获取和处理的时间变长。以图像大小为640*480,压缩比特率786kb/s为例,比较了从摄像头获取一帧图像的时间,即函数 uvcGrab()的执行时间,可以看出,方法一在获 取单帧图像的时间远大于其他方法,使得效率降低。方法uvcGrab()执行 时间ms方法一51方法二32单线程22表不同方法的uvcGrab()执行时间4.2平均时延启动手机秒表程序后将手机置于摄像头前, 录制秒表时间,可以在本地回环看到接 受的时间,从而计算出时延。如下图:Videosend (c) LAB511 at GtUTr 00 Fps00 1IH
10、#D089Lframe decoding 30ms0 11 1图发送和接收时间(上为发送,下为接收) 由此可计算出不同方法的大致平均时延。方法图片格式平均时延时间0.01s方法一640*48015960*720321280*72034方法二640*48010960*720311280*72030单线程640*48010960*720341280*72035表不同方法的大致平均时延由此可见,图像较大时,多线程可以减小视频传输的时延,且方法二比方法一效果 更明显。4.3多线程与单线程的细节对比由于方法一的效率不高,此处仅以方法二做为多线程对比,并且图像大小为1280*720,压缩率为1982kb/
11、s,压缩质量为最高编码和发送的平均时间ms获取一帧图像平均时间ms单线程0.93634585.88613多线程0.863087100.932使用多线程后,从摄像头获取一帧图像的时间增加了,编码和发送的时间减少了, 但多线程为并发运行,总时间取决于较慢的线程,即线程一,线程一循环一次的时间 为100.9217ms。单线程为顺序执行,循环一次的时间为100.9221ms。由于两个线程执行时间悬殊,整体上看,单线程与多线程的效果差别不大。但如果提高获取一帧图像 的时间或当压缩编码速率较低时,多线程便能表现出优势。五、结论和讨论5.1结论当视频图像较大时,多线程在每帧平均处理时间和时延上都比单线程的少
12、,整体效果比较好。但对于视频图像较小时,多线程显示不出优势,但考虑实际情况,即时视 频通信系统使用的是大图像,因而,实际应用中,还是可以使用多线程来减小视频传 输延迟的。5.2三个线程讨论从“ 4.3多线程与单线程的细节对比”中可以看到,程序运行的主要时间是在获取 视频图像上,压缩编码和发送所占用的时间远远小于获取时间,因为,将发送独立出 来作为第三个线程完全没有必要。要想进一步优化,则应该考虑如何减少多线程中获取图像的时间,如果能将多线程中获取图像的时间减少至单线程获取图像时间,那么,多线程优势就更加明显。六、心得通过这个课程设计,学习了多线程的使用,了解使用多线程的意义,并用两种方法 实现
13、即时视频通信系统发送端的多线程优化。其中,方法一是自己思考的结果,由于 欠考虑加锁带来的时延,实现效果欠佳。方法二是按老师的建议,使用TI的设置同步点的方法,得到了较好的结果。通过实践,我了解到不同方法实现的多线程的效果是 不一样的,在实际中,应该考虑不同方法产生的效果,选择合适的。七、参考文献1 徐程.Linux环境C程序设计.北京:清华大学出版社,20142012.112 杨宗德 吕光宏 刘雍. Linux 高级程序设计 . 北京:人民邮电出版社,附录一每100帧处理时间表100200300400500600700800900100011001200每帧平均时 间平均比特率 kb/s方法6
14、40*48900.14311195082337926907304413396638324426894717652372578164350.5609787.51-一一80614.38.85.33.08.68.12.53.69.47.93.99960*712234223333242942529528286302873125833019360010390114001240910176.41721184.7120.59.39.22.11.97.75.53.05.782.50.27.61280*1218222382326274284852952630437314483238933961034911359
15、1236810130.50662001.67720.26.39.37.64.58.23.53.17.6947.5方法640*46310.10368137121706020407237562710330447338273714440490438393347.15787.51-二二80266.05.11.44.53.23.31.4.38.09.26.55960*712235223343242942629527286282873022832289331910341113511236110127.55771204.0820.44.84.64.6.73.85.637.99.20.41280*12146223433243442538527336283372930830229322410331113411235010116.56432039.83720.53.78.13.32.1.85.49.33.766.67.69.4单线640*45321.8663.120081535518705220542540228784321303550238819421663350.2812785.44程80668664.76.54.98.14.16.47
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 菏泽银行面试题目及答案
- 2025年注册验船师资格考试(A级船舶检验专业基础环境与人员保护)综合试题及答案一
- 北京市门头沟区2023-2024学年七年级下学期第一次月考英语考试题目及答案
- 2025年图书馆管理员招聘面试模拟题及答题技巧
- 2025年医疗器械质量认证考试全真模拟题
- 2025年财务风险管理师高级实务操作手册及考试指南
- 2025年高空作业平台设计与使用技能考试题库及答案
- 2025年高中物理学科知识与教学能力面试题解
- 2025年政府机关招聘行政岗位笔试模拟题及答案
- 2026届江苏省无锡江阴市化学高三上期末教学质量检测模拟试题含解析
- 2025年稳定币在大宗商品跨境贸易中的应用研究报告
- 图文店员工基本知识培训课件
- 医院财务人员专业能力提升培训
- PDCA循环在医院应急管理中的应用
- 劳动仲裁员任职培训课件
- 2026创新设计高考总复习生物(人教版)-限时强化练答案解析
- 第四版(2025)国际压力性损伤溃疡预防和治疗临床指南解读
- DZ∕T 0033-2020 固体矿产地质勘查报告编写规范(正式版)
- 高等数学第一章综合测试卷含答案
- 高数下学期期末试题含答案3套
- HXD3型电力机车常见故障分析与处理
评论
0/150
提交评论