datasheet
超过460,000+ 应用技术资源下载
pdf

基于FFmpeg的远程视频监控系统编解码

  • 1星
  • 日期: 2015-06-30
  • 大小: 256.12KB
  • 所需积分:2分
  • 下载次数:0
  • favicon收藏
  • rep举报
  • 分享
  • free评论
标签: FFmpeg

基于FFmpeg的远程视频监控系统编解码 设计框架

电子技术研发 Electronics R&D  电子技术  10.3969 ̄.issn.1000—0755.2013.01.002  基于FFm p e g的远程视频监控 系统编解码  辛长春 娄小平 吕乃 光  (北京信息科技大学 仪器科 学与光 电工程 学院 )  摘 要 :在远程视频监控系统 中视频数据 的编码传输 以及解码显示是一个重要组成部分,通过对FFmpeg  的研究学 习,考虑采 用FFmpeg来实现编解码 的方法 。远程监 控系统 由采集 发送 端和接收处理端组成 ,采集  发送 端使用¥3C2440作 为嵌 入式硬件平 台,并通过USB摄像头OV9650采集视频 数据,经过FFmpeg编码后传输  给接收处理端 。接 收处理端接 收到数据后通过FFmpeg实时解码 ,采用OpenCV ̄示,实现远程监控。  关键词 :FFmpeg;编解码 :嵌入式  The FFm peg encoding and decoding in rem ote m onitor system  Xin Changchun Lou Xiaoping Lv N aiguang  School of Instrumentation Science& Optoelectronic Engineering.Beijing Information Science&Technology  University,Beijing 1 00 1 92,China  Abstract: In a remote m onitor system ,the video data’S encoding transm ission and decoding display are  important parts .Through the study of FFmpeg ,a m ethod using FFmpeg to encoding and decoding is been put  forward .The rem ote m onitor system  includes the capture sending part,and the receive  display part.The captu re  sending par t uses ¥3C2440 as the em bedded hardware platfor m ,and capt ures video data by the USB camera  OV 9650,then sends the video data out after FFmpeg encoding .The receive display part decodes the received data by  FFm peg,then displays through OpenCV to realize t h e rem ote m onitoring.  K ey words:FFmpeg;encoding and decoding ;em bedded;  0 引言  随着视 频编解码 技术 、计 算机 网络技术 、数字  信号处 理技术 和嵌入 式系统 的发展 , 以嵌入 式 网络  视频服 务器为 核心 的远 程视频 监控 系统开始 在市场  上 崭露头 角 。该系统把摄 像机输 出 的模 拟视频 信号  通 过 内置 的嵌 入式视频编 码器直 接转换 成视频 流 ,  通过计算机网络传输出去。嵌入式网络视频服务器具备  视 频编码 处理 、网络通信 、系统 控制等 强大 功能 ,  直接 支持 网络视 频传输和 网络管 理 ,使 得监控 范 围  达 到前所 未有 的广度 _1]。在 远程 视频监控 系统 中 ,  摄 像头获 取 的原始视频流 在传输 之前 需要压缩 ,而  FFmpeg可 以将 原始视 频 压缩 为H264格 式视 频流 ,  H264是一种 被广泛使用 的高精度视 频 的录制 、压 缩  和发布格式 ,因此采用FFmpeg来实现 。  1系统 方案  系统是在S3C2440平 台上运行嵌入式Linux系统 ,  使用CMOS摄像头OV9650获取实时 视频 图像数据 ,  采用H264标准 通过FFmpeg对 原始视频 进行压缩编码  成视频 流 ,通过 网络传输 ,用户在 接收 处理端经 过  FFmpeg解码 之后 ,使用OpenCV ̄示 播放 即可 实时  查 看远 程 视 频 图像 。  系统 由两部分组成 :采集发送端和接收处理端,  采用Client/Server设计模 式来实现两者之 间的相 互通  信,由接 收处理端 向采集发 送端发送 控制信号 ,采集  发送端开启摄像头进 行视频数据采集,采集 的原始视  频数据 是yuv422格式,经过FFmpeg编码 压缩成H.264  格式视 频流,经通信 网络传 输到接收处理 端 :接收处  理 端 接 收 到 视 频 流 数 据 后 ,经 FFmpeg解 码 ,通 过  OpenCV进 行 显示 。采 集 发送端 视频 数据 采集 和发  送 采用三 星公 司的具有ARM920T内核 的¥3C2440作  为嵌入式微控制器,接 收处理端采用普通 电脑 。系统  方 案 如 图 1所 示 。  l 按  l  拥  |t  通倍黼   毒  Fl叩eg勰   蕊默 l  采集发送嫱  3  电子技术研发 Electronics R&D  电子技 术  2采 集发送端  TCPMP、VLC、MPlayer等 开 源 播 放 器 都 用 到 了  采集 发送端主要包括嵌入式Linux平 台和摄 像头  FFmpeg。 [。]  两部分,嵌入式Linux平 台需要搭建交叉编译环境,而  FFmpegeOFF是指 Fast Forward。  摄像头需要驱动程序 才能正常工作 。  嵌 入 式 Linux平 台采 用 三 星 公 司 的 S3C2440A  2.3.2 编 码  处 理 器为 硬件 平 台 ,¥3C2440A处 理器 是一 款基 于  OV9650摄像 头输 出的数 据为yuv422格 式 ,而  ARM920T内 核 的 16/32bit嵌 入 式 处 理 器 , 主 频  FFmpeg编码 需要输入yuv420格式数据 ,因此在编码  400MHz,最高可达533MHz,支持30/130/200万像素  之前 需要 先 ̄yuv422格式数据转化 为yuv420格式 。  CMOS摄像头,支持linux2.4 ̄lWince4.2双操作系统 ,适  FFmpegqh的函数SWS scale(1可 以实现这个过程 。  合应用于对功率和成本都较敏感的嵌入式系统场合 。  在 使用FFmpeg编码之前,首先需要对FFmpeg库  摄像 头采用Omni Visio公 司生产 的CMOS摄像  进行初始 化 ,注册 所有 的编解码 器 以及 文件 格式 ,  头 OV9650,具有 高敏感度 、低 功耗 ,高分辨率 (最  设置编 码器码率 、帧速率 、编 码像素格 式等参数 ,  高1300×1028 pixels),支持大量常用 的图像格 式、  然后 寻找编码器 并打开 ,打 开编码器 之后才可 以进  支持 自动 图像 控 制等 优 点 。在 接 口上 能够 保 持 与  行编码 。通过设置 结构体AVCodecContext中的各个  ¥3C2440的一致性 。输 出图像最 大为 130万像素 ,输  成 员参 数 来 完 成 参 数 的设 置 过 程 ,例 如 通 过 设 置  出图像格 式包括 SXGA,VGA,QVGA,CIF,QCIF等,并  可以输出不同尺寸的图像 。对于不 同的输出图像格式,  最高帧率可 以不 同,最高可达 120fs。输 出的8位数据  格 式 包 括YUV/YCbCr(4:2:2)、GRB(4:2:2)、原 始  RGB数据3种 l2 J。  2.1建立嵌入式Linux平台  建立嵌入式Linux系统的基本流 程 : 首先在宿主  机上建立交叉编译环境 ,  然后移植Linux的引导程序  AV CodecContext 一> bit rate, AV CodecContext 一  >width,AVCodecContext一>height等 可 以设置 码 率 ,宽  度和 高度等 ,通过设置AVCodecContext一>pix fmt=  PIX FMT YUV420P设置YUV420像素格式 。编码 的  核 心函数是avcodec encode video()。系统每采集一  帧数据,就送 给avcodec encode video()函数 编码成  H.264视频流 。其编码流程如 图2所示 。  fIl 辫  佃 《》  —]   到 目标板,  最后构建嵌入 式Linux系统并移植 到 目标  板 。构建嵌 入式Linux系 统主要包 括对 内核进行裁剪  工  }群— # j理峭 《》  料-I量柚 穗舳e()  和配置,根据实 际的硬件系统进行 内核和外 设驱动程  序 的移植开发, 以及构建Linux的根文件系统[3]。  2.2摄像头驱动配置  CMOS摄像头驱动 以MODULES的形式编写,因为  MODULES形式 的驱动可动态加载 ̄1JLinux内核 l4]。  加载驱动程序后,就可 以像操作普通 文件一样对  摄 像头进 行操作 。如 :定义 intm f ilev412 ,通过m f ilev412  _ =open(”/dev/camera”,0 RDWR)打 开 摄 像 头 ,通 过  read(fd,&inyuv422,D S ̄ZE)读取摄像头 的视频数据到  纛柚 自  黼 瓤玲《)  .  甜 磊噩矗e搬。矗  《)  工  样盼l麟 纛胃 -蕾Bl e  蛭雠 《》  黼 赫 e  一  e霸∞赫 赫赫 《)  毒  群 矾  l帽 《》  0  群稻  轴瓣 i 嗽  tee()  数组inyuv422q ̄,通过close(m r iley412)关 闭摄像头[53。  有 了视频数据后,就可 以通过FFmpeg进行编码 。  2.3 FFmpeg编 码  2.3.1 FFmpeg简 介  FFmpeg是一个开源免 费跨平 台的视 频和音频流  方案 ,属 于 自由软件 ,采 用LGPL或 GPL许 可证 (依  据所你选择 的组件),是一个集录制 、转换、音/视频  编 解 码 功 能 为 一 体 的 、 完 整 的开 源 解 决 方 案 。  FFmpeg的开发基于Linux操作系统 ,也可 在大 多数操  作 系统中编译和使用 。FFmpeg支持MPEG、DivX、  MPEG4、AC3、Dv、FLv等 40多 种 编 码 ,AVI、  MPEG、OGG、Matroska、ASF等 90多种 解 码 :  下 面对编码流程 的各个 步骤 中主要 函数的作用  进 行 详细 介 绍 :  1) av register all (1:注册库 中含有所有 文件 _ 格式和编解码器,没有这一步将无法打开编解码器 。  2)av open input f ile ():打开摄像头视频文件 。 _ 3)av find stream info(1:寻找视频流 。  4)av find encoder():寻找编码器 ,编码器参  数需在pCodec中初始化 ,参数 的初始化 很重要 ,对  编码 的 图像 质量有很大影响 。  pCodec avcodec f ind encoder (CODEC—ID  — — H264);//寻找H.264格式编码器  4  电子技术研发 Electronics R&D  电子技 术  5)avcodec alloc frame():为编码帧分配 内存 。  pFrame  avcodec alloc frame(); //pFrame 为  — — AVFrame格 式  6) avcodec open(): 打 开 编 码 器 。  7) av read flame():从视频流 中读取一帧视频  数 据 。  8)avcodec encode video():编码一帧视频数据 。  9)avcodec close():关 闭编码器 。  10) avformat close input f ile ():关 闭视频摄像 . 头文件 。  3接收处理 端  接 收处 理端可 以与任 意一个采 集发送 端进 行连  接通 信 。连接后 可 以接收采 集发送 端发送 的视 频数  据,经过FFmpeg解码 后显示 。  3。1 FFmpeg解 码  用FFmpeg解码 的流程 与编码 的流 程 大致相 同,  只是解码 的核 心函数为avcodec decode video f)。接  收处理端接 收到一帧数据后,通过avpicture f ill()存储  到 AVFrame格 式 的 内 存 空 间 中 , 然 后 再 使 用  avcodec decode video()函数进行解码 。其解码 流程  — — 如 图3所 示 :  l  鄹  橱 堋 》  ●  毒  辩∞ e  孵 o 0  1  w 函畦如伪  ()  ●  工  _蒌ctk(》  ∞瞳  en《)  ‘  显示凝额  Jr  0  删#越  ln 《)  卅洫  ce_皿 (》  Windows操作 系统 相结 合 的跨 平 台上,实 ̄FFmpeg  的编解 码 ,为实 际嵌入 式 视频 监控 系统 的视频 压缩  传输设计,提供 了一种可行 的方法 。E7]  参 考 文 献  [1] 肖政宏,韩秋风,朱丽群.基于ARM和DsP的远程  视频监控系统 的设计 与实现 [J].计算机科学与  工 程 ,2006,28(9):53—55.  [2]杨海 山,何东健 .基于ARM ̄DLinux的视频采集  系统研 究与开发 [J].微计算机信息,2009,25(11—  2、:122—124.  [3] 赖 于 树 .ARM 微 处 理器 与应 用 开 发 [M].  北 京 :电子 工业 出版 社 ,2007.  [4]魏永 明,骆 刚,姜君.Linux设备驱动程 序 [M].  北京 :中国电力 出版社.2002.  [5]冯 国进.嵌入式LinuxS ̄动程序 设计从入 门到精  通 [M].北京 :清华大学 出版社,2008:102—146.  [6]蒋志峰.FFMPEG的快速音视频开发方法 [J].  单 片 机 与 嵌入 式 系 统 应 用 ,2008(1):69.71.  [7]郑 旭 东,张培 仁,高修 峰 ,等.嵌 入 式 网络 视频 监控  系 统 [J].仪表 技术 与传感 器,2006(08):24—26.  3.2视频 显示  FFmpeg对 H.264解码 出来 格 式是YUV(.i420)格  式 ,需 要 转 换 成 RGB(.rgb24)格 式 显 示 , 使 用  FFMPEG中的SWS scale()函数可 以实现格 式转换 。  显示视频采用 的是OpenCV。显示 的核心函数是  cvShowImage(char*name,lpllmage*dst),将 得到 的  RGB(.rgb24)格式数据 转换为OpenCV格式 的lpllmage  数据 ,然后显示在监控 窗 口上 ,如 图4所示 :  图4 监 控 画 面 (参 见 右 栏 )  作者 简介:  辛长春 ,男 ,山东 临沂人 ,硕士 生 ,主要从事  图像编解码方面 的研 究。  收稿 日期 :20l2一O9—27  基 金支 持 :北京 市 自然科 学基 金 (4102020),  北京市属 高等学校人才 强教计划资助项 目  (PXM 20ll 014224 113533)  4 结束语  随着视频压缩技术 的发 展成熟,嵌入式视频监控  逐渐 在监 控领 域 占有 重要 地位 。以¥3C2440为嵌入  式硬件平 台,通过摄像 头采集数据,在嵌入式Linux与  5 
更多简介内容

评论

下载专区


TI最新应用解决方案

工业电子 汽车电子 个人消费电子

$(function(){ var appid = $(".select li a").data("channel"); $(".select li a").click(function(){ var appid = $(this).data("channel"); $('.select dt').html($(this).html()); $('#channel').val(appid); }) })