基于FFMPEG的视频水印系统设计

2018-04-13 01:07宋燕燕
计算机技术与发展 2018年4期
关键词:编解码视频流视频文件

宋燕燕,秦 军

(中国传媒大学南广学院,江苏 南京 211172)

0 引 言

计算机与网络信息技术的快速发展,促使当今社会进入了网络信息时代,各个领域的数据和信息急剧增多。数字媒体的安全问题也极大地制约了当前信息化进程,数据的版权保护问题日益凸显,因此数字水印技术应运而生。数字水印技术是将一些标识信息直接嵌入在数字媒体元素中,且不影响原载体的使用价值。数字水印是保护信息安全、实现防伪溯源、版权保护的有效办法[1]。当前的媒体形式中,最能吸引眼球的是视频文件,如何对视频文件进行有效保护已经成为十分迫切的研究课题。视频的格式有很多种,所以,相同的水印算法在不同种视频中,并不一定兼容。文中设计的系统的意义在于,可以根据不同的编码过程在程序中加以调整,使得在同一个平台上进行多种格式视频水印的嵌入和提取,避免了给不同格式的视频单独调用编解码库构建仿真平台的麻烦。实现了一种基于FFMPEG的视频水印系统,使得各种编码格式的视频水印算法都能在同一个仿真平台通用。

1 相关技术

FFMPEG是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它提供了录制、转换以及编解码功能的完整解决方案[2-5],包含了非常先进的音频/视频编解码库libavcodec。为了保证高可移植性和编解码质量,libavcodec里很多编解码方式都是从头开发的[6-9]。

FFMPEG支持MPEG,DivX,MPEG -4,AC3,DV,FLV等40多种编码,以及AVI、MPEG、OGG、Matroska、ASF等90多种解码,涵盖了多种音视频格式。FFMPEG也支持常见的图像色彩空间,并且在libavswcale中定义了色彩空间转换的相关函数,实现了各种色彩模式的相互转换[10-12]。

SDL(simple direct-media layer)是一套开放源代码的跨平台多媒体开发库,使用C语言编写。SDL提供了数种控制图像、声音、输出、输入的函数,让开发者只要用相同或相似的代码就可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。目前SDL多用于开发游戏、模拟器、媒体播放器等多媒体应用领域[13-15]。

2 系统方案

视频水印系统主要分为三个模块:输入模块、处理模块和输出模块,各模块之间通过调用各个接口进行交互,使得功能更加完善,使用起来更加契合[11]。

1.输入模块。

(1)内存管理。

内存管理的主要功能就是将选中的视频文件信息写入内存,并且通过一系列的操作将视频数据提供给FFMEPG的解码器。

(2)解码。

解码主要是对视频解码,文中对音频信息不作处理。视频解码主要的内容就是将之前存入内存的数据信息通过FFMPEG的解码器进行解码,解码完成后送给SDL。并且利用SDL进行YUV数据显示。

(3)渲染纹理。

负责把利用FFMPEG解码获得的YUV数据渲染到纹理中,再拷贝到渲染器,实现视频成功显示。

2.处理模块。

利用FFMPEG中的过滤器的各种方法,给视频加“特效”,而文中的特效就是图片水印。FFMPEG的libavfilter类库提供了大量的视音频过滤器,种类繁多,有很多现成的filter可以直接使用,也给大家研究视频播放器带来了许多便捷。文中是在FFMPEG的libavfilter类库的基础上完成一个水印叠加器,利用Visual Studio 2015平台加以实现。

可以将一张透明背景的图片作为水印叠加到一个视频文件上。需要注意的是,其叠加工作是在解码后的YUV像素数据的基础上完成的。程序支持使用SDL显示叠加后的YUV数据,也可以将叠加后的YUV输出成文件。

3.输出模块。

利用FFMPEG中封装好的代码,实现视频的输出。系统方案如图1所示。

图1 系统方案

3 视频流解码

每个视频都有自己的封装格式,而所谓封装格式,也就是视频的类型。比如:MP4、TS等。也就是说,在每个视频的封装格式中,都包含此视频的各种信息,比如视频流和音频流等。对于有封装格式的视频,需要先从中提取出视频流,然后通过解码器解码。例如解码TS格式的视频文件,就是“TS→H.264码流→YUV”[4]。视频流解码流程如图2所示。

图2 视频流解码流程

(1)首先设定函数av_register_all()进行初始化,再设定avformat_open_input()方法打开文件,获取视频文件的封装格式信息。其中需要判断打开是否成功,如果不成功则显示“无法打开视频文件”。

(2)使用for循环,判断流信息中哪个是视频流信息,哪个是音频流信息;找到视频流后,寻找解码器;找到解码器后,使用avcodec_open2()打开解码器。

(3)定义方法av_read_frame()获取封装格式AVPacker信息,再使用Avcodec_decode_video2()方法解码AVPacker信息。若没有获取到AVPacker信息,则停止运行。

(4)若获取到了AVPacker信息,则使用av_malloc()方法将YUV格式信息从内存中取出,填充到pAVFrameYUV中。

4 水印添加

视频文件经过解码、渲染等一系列工序之后,要将水印文件添加到视频文件上。FFMPEG自带的类库中含有大量的过滤器,这些过滤器可以将一些文件信息转码。

AVFilter的基本处理流程如下:

(1)avfilter_register_all():注册。

avfilter_graph_alloc():分配一个AVFilterGraph。

(2)创建AVFilterContext。

avfilter_graph_create_filter():创建filter。

(3)重复以上两步,创建一个source,一个sink。

avfilter_graph_parse_ptr():将一串通过字符串描述的Graph添加到AVFilterGraph中。

avfilter_graph_config():检查FilterGraph的配置。

av_buffersrc_add_frame():向FilterGraph中加入一个AVFrame。

av_buffersink_get_frame():从AVFilterGraph中取出一个AVFrame。

(4)重复以上两步,加入一个AVFrame处理AVFrame,取出AVFrame。

以上就是AVFilter的处理流程,其他特效通过avfilter_graph_parse_ptr(filter_graph,filters_descr,&inputs,&outputs,NULL)中filters_descr这个字符串来决定,调用FFMPEG提供的方法和传入了符合格式的过滤字串。

具体流程如图3所示。

图3 视频水印添加流程

5 运行结果

基于FFMPEG的视频水印系统已完成,系统运行环境:Windows 2007系统;平台:Visual Studio 2015。

首先在Visual Studio中运行系统,如图4所示,可以看到左部的图片是默认图片,点击“打开文件”,选择一个视频文件进行添加,而文中选择了一部后缀名为.ts的视频进行添加,视频添加后左部默认图片会变成视频文件的首帧画面。

点击“播放”按钮,视频可以正常播放,而点击“暂停”按钮,视频文件会停在当前帧,点击“停止”按钮,视频会停止播放并且恢复到默认图片。

实现一张水印图片,点击“选择水印”按钮,选中该图片,选中后会呈现于界面上,用户可以查看是否选择正确。

点击“加水印”按钮,系统会自动将图片水印加入视频文件画面中,并且添加完毕会自动导出到项目文件,导出的视频格式类型是.yuv。并且在添加完成后,会有弹框提示,提醒用户已经完成水印添加,并且已经导出。

图4 运行结果

6 结束语

从数字媒体元素版权保护需求出发探讨了视频水印系统设计方案,利用FFMPEG编解码库解决视频水印算法中的编解码问题,实现H.264的视频解码功能,包括ts、mp4等视频格式。提出了FFMPEG转码图形用户界面的具体实现方法,介绍了FFMPEG转码加密模块的流程、函数调用关系、具体加密算法的实现和视频播放模块的具体实现。利用模块化思想,为不同编码格式的视频水印算法提供一个通用平台,对视频的版权保护起到了积极作用,具有一定的现实意义和参考价值。

参考文献:

[1] CHANG X,WANG W,ZHAO J,et al.A survey of digital video watermarking[C]//Seventh international conference on natural computation.[s.l.]:[s.n.],2011:61-65.

[2] 任 严,韩 臻,刘 丽.基于FFMPEG的视频转换与发布系统[J].计算机工程与设计,2007,28(20):4962-4963.

[3] 王 彤.基于FFmpeg的H.264解码器实现[D].大连:大连理工大学,2011.

[4] CHENG Yun,LIU Qingtang,ZHAO Chengling,et al.Design and implementation of mediaplayer based on FFmpeg[J].Software Engineering and Knowledge Engineering,2012,2:867-874.

[5] ZENG Hao,FANG Yuan.Implementation of video transcoding client based on FFMPEG[J].Advanced Materials Research,2013,756-759:1748-1752.

[6] 辛长春,娄小平,吕乃光.基于FFmpeg的远程视频监控系统编解码[J].电子技术,2013(1):3-5.

[7] 张国庆.基于FFmpeg的视频转码与保护系统的设计与实现[D].武汉:华中师范大学,2011.

[8] 李芳芳,苏凯雄.基于FFmpeg的H.264格式转换器的设计与实现[J].电视技术,2016,40(7):32-35.

[9] 胡 聪,周 甜,唐璐丹.基于FFMPEG的跨平台视频编解码研究[J].武汉理工大学学报.2011,33(11):139-142.

[10] 吴 岳,施惠娟.基于FFMPEG的视频水印系统[J].电子设计工程,2013,21(23):185-187.

[11] 胡 成,任平安,李文莉.基于Android系统的FFmpeg多媒体同步传输算法研究[J].计算机技术与发展,2011,21(10):85-87.

[12] LI Chengbo,JIANG Hong,WILFORD P,et al.Video coding using compressive sensing for wireless communications[C]//WCNC 2011.[s.l.]:IEEE,2011:2077-2082.

[13] 李 科,李 璐,兰时勇.基于FFmpeg和SDL实现多路实时流变换及播放[J].计算机技术与发展,2014,24(4):65-68.

[14] 汪俊杰,王志明.基于SDL的H.264流媒体播放系统[J].计算机系统应用,2013,22(12):51-54.

[15] DUAN H,NG B P,CHONG M S S,et al.Applications of the SRV constraint in broadband pattern synthesis[J].Signal Processing,2008,88(4):1035-1045.

猜你喜欢
编解码视频流视频文件
边缘实时视频流分析系统配置动态调整算法研究
随心定制视频文件的缩略图
为多重编解码世界做好准备
大型民机试飞遥测视频编解码方法研究
快速检索,抓取电影中的精彩篇章
铁路货场智能大门集装箱全景图像采集方法研究
美国视频流市场首现饱和征兆
网络电视视频编解码主流标准对比
三招搞定课件中的“网络视频”
视频文件,看过来