无线视频实时传输方法

文档序号:7896121阅读:701来源:国知局
专利名称:无线视频实时传输方法
技术领域
本发明属于无线Mesh网络通信领域,是基于ARM (Advanced RISC Machines)处 理器和嵌入式Linux操作系统的无线视频实时传输方法。尤指一种基于linphone、FFmpeg 及硬件视频编解码模块的无线视频实时传输方法。
背景技术
无线网格网WMN (Wireless Mesh Network)是一种新型的无线宽带接入网络,具 有带宽资源有限特点,视频实时传输业务在无线环境中的应用仍面临巨大的挑战。因为数 字化后的视频信号数据量很大,对于存储和传输都带来很大的负担,尤其是在无线信道环 境中,由于带宽有限,无线频率资源宝贵,需要一种高效的压缩编码方法支持。当前,视频信号压缩编解码处理的方案有软件和硬件两种。随着计算机体系结构 以及集成电路设计制造技术的快速发展,通用处理器的处理能力得到了显著的提升,在软 件方面的视频处理技术发展迅速。但是,视频数据量大的特点使得CPU大量的被用来处理 视频的编解码,在多任务同时执行时候,CPU的负担很重。近年来,在硬件方面,随着超大规 模集成电路片上系统SoC (System on Chip)技术的不断发展,基于嵌入式处理器和专用硬 件配合工作的编解码器成为设计的主流。很多芯片设计公司推出了带有硬件视频编解码单 元的产品。嵌入式处理器软件灵活性,加上专用硬件视频编解码器高效的性能,不仅能够解 脱CPU的负担,又能达到高效的视频编解码效率。然而,众多芯片公司生产的带有硬件视频编解码单元的产品只能结合各自开发的 嵌入式处理器软件,无线视频实时传输方式不统一,不具备通用性,因此需要一种适用于所 有的具有硬件编解码模块的ARM处理器的无线视频实时传输方法。

发明内容
本发明的目的在于,提供一种基于Linphone、FFmpeg及硬件编解码模块的无线视 频实时传输方法,该传输方法适用于所有带有硬件视频编解码模块的ARM处理器。本发明的目的在于,提供一种基于Linphone、FFmpeg及硬件编解码模块的无线视 频实时传输方法,适用于带有视频编解码模块的ARM开发板,解决了软件视频编解码占用 大量CPU资源的问题,具有高效的视频编解码效率。为达到上述目的,本发明采用如下技术手段
一种无线视频实时传输方法,其特征在于包括以下步骤将硬件视频处理单元注册进 开源软件FFmpeg中,作为FFmpeg的硬件编解码器;将FFmpeg的硬件编解码器嵌入进开源 软件Linphone中;用户空间应用层通过调用Linphone,进一步调用嵌入其中的FFmpeg硬 件编解码器,将视频编解码过程交由硬件视频处理单元处理。将硬件视频处理单元注册进开源软件FFmpeg包括以下步骤在FFmpeg中添加硬 件视频处理单元库函数文件;在所述的库函数中添加头文件,声明FFmpeg调用硬件视频处 理单元所需的编解码器接口函数,实现在FFmpeg中分别添加编解码器。
3
在FFmpeg中添加编码器包括以下步骤初始化硬件视频处理单元编码器接口函 数;编码一帧图像;关闭硬件视频处理单元编码器接口函数。在X264. c文件中添加硬件视频处理单元编码器接口函数。在FFmpeg中添加解码器包括以下步骤初始化硬件视频处理单元解码器接口函 数;解码一帧图像;关闭硬件视频处理单元解码器接口函数。在H264. c文件中添加硬件视频处理单元解码器接口函数。通过交叉编译将FFmpeg的硬件编解码器嵌入进开源软件Linphone中,设置 Linphone传输视频信号,并指定传输路径为FFmpeg路径。Linphone基于会话初始协议及实时传输协议开发。硬件视频处理单元选用i. mx27微处理器。本发明的有益效果在于本发明的无线视频实时传输方法适用于所有带有硬件视 频编解码模块的ARM处理器,具有通用性,所有的具有硬件编解码模块的产品都可以使用 这种方法完成在无线环境中的视频实时传输。此外,视频实时传输具有大数据量、时延敏感 的特点,对于自带有硬件视频编解码模块的设备来说,可以交给硬件视频编解码模块完成 视频数据的压缩编解码任务,减轻了 CPU的负担,提高了压缩效率。


图1是本发明视频实时传输方法的步骤流程图。图2是本发明视频实时传输系统软件架构图。图3是本发明基于i. m27处理器实现视频实时传输系统软件架构图。
具体实施例方式下面结合附图及实施例对本发明的发明内容作进一步的描述。本发明以飞思卡尔(Freescale)公司推出的i. mx27微处理器为例说明, i. mx27微处理器基于ARM926EJ-S内核,片内集成了硬件视频处理单元VPU,支持的编解 码格式有 H. 264、MPEG4、H. 263,能够处理的分辨率有 720x480@30fps、720x576@25fps、 640x480i30fpso本发明应用于该处理器,通过添加VPU硬件H. 264编解码器进入FFmpeg, 然后linphone对FFmpeg的调用来实现无线视频实时传输。H. 264是一种视频编解码标准, 就是将视频数据压缩编码,以减少数据量太大的问题,相应地,在接收端进行相应地解码。Linphone和FFmpeg是一种开源软件架构,Linphone中的视频处理过程是由嵌入 其中的开源软件FFmpeg完成,FFmpeg支持多种编解码格式。本发明是将i. mx27微处理器中的视频处理单元VPU注册进开源软件FFmpeg中, 当做它的一个编解码器,再把FFmpeg编译进另一个开源软件Linphone中,用户空间应用层 调用Linphone时就自动调用了嵌入其中的FFmpeg的硬件编解码器VPU,这样,整个视频编 解码过程就交给了硬件编解码器来处理,不占用CPU资源。图1为本发明视频实时传输方法的步骤流程图,图2为本发明视频实时传输系统 软件架构图,图3为本发明基于i. m27处理器实现视频实时传输系统软件架构图,以下结合 图1、2、3具体说明本发明视频实时传输的过程。步骤一将硬件视频处理单元VPU注册进开源软件FFmpeg中,作为FFmpeg的硬件编解码器。FFmpeg是一个集录制、转换、音/视频编码解码功能为一体的完整的开源解决方 案。FFmpeg 支持 MPEG4、FLV 等多种编码,AVI、OGG、ASF 等多种解码。encoder/decoder 和 muxer/demuxer是以函数指针的方式作为开放的公共接口。首先,在FFmpeg中添加VPU的库函数,主要是在Iibavcodec文件夹下添加mx27 文件夹,里面有 vpu_lib. h、vpu_lib. c、vpu_codec. h、vpu_codec. c、vpu_io. c、vpu_io. h、 vpu_display. c、vpu_display. h 等库函数文件。其次,分别添加VPU硬件编码器和VPU硬件解码器。添力口头文件 #include "mx27/vpu_codec. h"。 头文件 vpu_codec. h中声明了 FFmpeg调用硬件VPU所需的接口函数。包括初始化VPU编码器vpu_ ff_EncodeInit(AVCodecContext *avctx)、关闭 VPU 编码器函 f^int vpu_ff_ EncodeClose (void)、编石马一中贞函数 vpu_ff_EncodePicture (AVCodecContext *avctx, unsigned char 氺buf, int buf—size, void 氺data)、角军石马一中页函■ vpu_ff_ DecodePicture (AVCodecContext 氺avctx, FRAME—BUF 氺氺pfb, uint8_t 氺buf, int buf_ size)、初始化解码器函数vpu_ff_DecodeInit (AVCodecContext *avctx)关闭解码器函数 vpu_ff_DecodeClose (void)。( 1)添加VPU硬件编码器
添加VPU硬件编码器是在libavcodec/libx264. c函数中。FFmpeg在发送端相当于一 个录制机,录制视频,然后把视频进行压缩编码,使用VPU硬件编码器就是在这里注册进去 的。编码器通过下面接口注册进入FFmpeg
AVCodec 1ibx264_encoder = { .name = 〃libx264〃, .type = C0DEC_TYPE_VIDE0, id = C0DEC_ID_H264, .priv_data_size = 10, .init = X264_init, .encode = X264_frame, .close = X264_close, capabilities = C0DEC_CAP_DELAY,
.pix_fmts = (enum PixelFormat[]) { PIX_FMT_YUV420P, -1 }
};
其中,X264_init是初始化编码器接口函数,X264_frame是编码一帧图像接口函数, X264_clOSe是关闭编码器接口函数。类似地,将VPU的编码相关库函数添加进入相应地 接口函数。具体是在X264_init ()编码器初始化中,添加函数vpu_ff_EncodeInit ()进行 VPU编码器的初始化操作;在编码接口函数X264_frame ()中添加VPU编码函数Vpu_ff_ EncodePictureO,编码一帧图像;在关闭编码器接口函数X264_cloSe ()中调用VPU编码器 关闭函数vpu_ff_EncodeClose (),关闭VPU编码器。
(2)添加VPU硬件解编码器
VPU硬件解码器在文件h264. C文件中添加。
注册H. 264进入FFmpeg的解码器。添加VPU硬件解码器是在1 ibavcodec/h264. c函数中,解码器通过以下接口注册进入FFmpeg
AVCodec h264_decoder = { "h264",
C0DEC_TYPE_VIDE0, C0DEC_ID_H264, sizeof(H264Context), decode_init, NULL,
decode_end, decode_frame,
C0DEC_CAP_DR1 | CODEC_CAP_TRUNCATED | CODEC_CAP_DELAY, .flush= flush_dpb,
};
其中decodejnit是解码器初始化接口函数,decodejnd是结束解码调用接口函数, decode_frame是解码调用接口函数。相应地,将VPU的解码相关库函数添加进入相应的 接口函数。具体是在decode_init()解码器初始化中,添加函数vpu_ff_DecodeInit () 进行VPU解码器的初始化;在解码函数deC0de_frame ()添加VPU解码函数vpu_ff_ DecodePicture (),VPU解码一帧图像;在关闭解码器函数deCOde_end()中调用VPU解码器 关闭函数vpu_ff_DecodeClose (),关闭VPU解码器。这样,在使用H264编解码视频时,就调用了 VPU,使用硬件编解码器完成视频编解 码。步骤二 将FFmpeg的硬件编解码器嵌入进开源软件Linphone中。将FFmpeg的硬件编解码器嵌入Linphone是通过交叉编译实现的,也就是把该 Linphone程序移植到开发板上,使该程序在开发板上运行起来进行编译。通过交叉编译将FFmpeg的硬件编解码器嵌入进开源软件Linphone中,设 置Linphone可传输视频信号,并指定传输路径为FFmpeg路径。编译Linphone的./ configure,指定选项一enable-video,并设定一with_FFmpeg=FFmpeg_PATH0 其中, FFmpeg_PATH是FFmpeg路径,这样就把FFmpeg编译到Linphone中了。由于在步骤一中已 将硬件视频处理单元VPU注册进开源软件FFmpeg中作为FFmpeg的硬件编解码器,因此,在 编译FFmpeg时,就将FFmpeg的硬件编解码器嵌入进了开源软件Linphone中。步骤三用户空间应用层通过调用Linphone,进一步调用嵌入其中的FFmpeg的硬 件编解码器,将视频编解码过程交由硬件视频处理单元处理。Linphone是一种基于WEB的IP电话工具,运行于Linux和Windows xp下。通过 Linphone可以通过呼叫在互联网上的其他人的IP来与其自由地进行声音、视频通信,也可 以进行即时文本信息传送。Linphone是遵从SIP (Session Initiation Protocol)会话初 始协议及RTP (Real-time Transport Protocol)实时传输协议开发的,它需要和支持SIP 协议的电话或者代理服务器进行相互操作。Linphone软件的实现需要很多依赖库,跟视频编解码有关的依赖库主要是
6FFmpeg ;跟音频编解码有关的库主要是libogg、Speex ;跟传输有关的库主要是libosip2和 libeX0sip2。音频的编解码和传输是使用的Iinphone自带的编解码方案和传输方式完成。另外,本发明完成了基于i.mx27微处理器的ARM-Linux音视频应用程序的交叉编 译、移植与在无线环境中的传输测试。本发明的无线视频实时传输方法适用于所有带有硬件视频编解码模块的ARM处 理器,具有通用性,所有的具有硬件编解码模块的产品都可以使用这种方法完成在无线环 境中的视频实时传输。此外,视频实时传输具有大数据量、时延敏感的特点,对于自带有硬 件视频编解码模块的设备来说,可以交给硬件视频编解码模块完成视频数据的压缩编解码 任务,减轻了 CPU的负担,提高了压缩效率。
权利要求
1.一种无线视频实时传输方法,其特征在于包括以下步骤将硬件视频处理单元注册进开源软件FFmpeg中,作为FFmpeg的硬件编解码器;将FFmpeg的硬件编解码器嵌入进开源软件Linphone中;用户空间应用层通过调用Linphone,进一步调用嵌入其中的FFmpeg硬件编解码器,将 视频编解码过程交由硬件视频处理单元处理。
2.如权利要求1所述的无线视频实时传输方法,其特征在于,将硬件视频处理单元注 册进开源软件FFmpeg包括以下步骤在FFmpeg中添加硬件视频处理单元库函数文件;在所述的库函数中添加头文件,声明FFmpeg调用硬件视频处理单元所需的编解码器 接口函数,实现在FFmpeg中分别添加编解码器。
3.如权利要求2所述的无线视频实时传输方法,其特征在于,在FFmpeg中添加编码器 包括以下步骤初始化硬件视频处理单元编码器接口函数;编码一帧图像;关闭硬件视频处理单元编码器接口函数。
4.如权利要求3所述的无线视频实时传输方法,其特征在于在X^H.c文件中添加硬 件视频处理单元编码器接口函数。
5.如权利要求2所述的无线视频实时传输方法,其特征在于,在FFmpeg中添加解码器 包括以下步骤初始化硬件视频处理单元解码器接口函数;解码一帧图像;关闭硬件视频处理单元解码器接口函数。
6.如权利要求5所述的无线视频实时传输方法,其特征在于在 64.c文件中添加硬 件视频处理单元解码器接口函数。
7.如权利要求1所述的无线视频实时传输方法,其特征在于通过交叉编译将FFmpeg 的硬件编解码器嵌入进开源软件Linphone中,设置Linphone传输视频信号,并指定传输路 径为FFmpeg路径。
8.如权利要求7所述的无线视频实时传输方法,其特征在于=Linphone基于会话初始 协议及实时传输协议开发。
9.如权利要求8所述的无线视频实时传输方法,其特征在于硬件视频处理单元选用 i.mx27微处理器。
全文摘要
一种无线视频实时传输方法,包括以下步骤将硬件视频处理单元注册进开源软件FFmpeg中,作为FFmpeg的硬件编解码器;将FFmpeg的硬件编解码器嵌入进开源软件Linphone中;用户空间应用层通过调用Linphone,进一步调用嵌入其中的FFmpeg的硬件编解码器,将视频编解码过程交由硬件视频处理单元处理。本发明的无线视频实时传输方法对于自带有硬件视频编解码模块的设备来说,可以交给硬件视频编解码模块完成视频数据的压缩编解码任务,减轻了CPU的负担,提高了压缩效率。
文档编号H04N7/26GK102098513SQ20101059644
公开日2011年6月15日 申请日期2010年12月20日 优先权日2010年12月20日
发明者唐艳, 张伟, 李世杰, 李旭, 沈杰 申请人:北京交通大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1