目录
C++软件异常排查从入门到精通系列教程(核心精品专栏,订阅量已达600多个,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/125529931C/C++实战专栏(重点专栏,专栏文章已更新480多篇,订阅量已达数百个,欢迎订阅,持续更新中...)https://blog.csdn.net/chenlycly/article/details/140824370C++ 软件开发从入门到实战(重点专栏,专栏文章已更新260多篇,欢迎订阅,持续更新中...)https://blog.csdn.net/chenlycly/category_12695902.htmlVC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/124272585C++软件分析工具从入门到精通案例集锦(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/article/details/131405795开源组件及数据库技术(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/category_12458859.html网络编程与网络问题分享(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/category_2276111.html
1、VLC简介
VLC全称是Video Lan Client,是Video LAN开源项目组织中的一款全开源的流媒体服务器和多媒体播放器。它是用C语言实现的,可以播放来自网络、摄像头、磁盘、光驱的文件,支持包括MPEG4、H264、H265、DivX、WMV、Vorbis、AC3等多种音视频协议。VLC最为突出的就是流媒体文件的功能,VLC支持各种流媒体协议,能直接播放远端的流媒体视频,只要输入一个视频文件的网址即可,无需下载到本地。此外,VLC还可以直接播放没有下载完成的文件。
VLC原先是几个法国的大学生做的项目,后来他们把VLC作为了一个开源的项目,吸引了来自世界各国的很多优秀程序员来共同编写和维护VLC,才逐渐变成了现在这个样子。
VideoLanServer(VLS)的功能已经合并到VLC中,所以VLC不仅仅是一个音视频播放器,它也可以作为小型的视频服务器或流媒体服务器使用,可以一边播放一边转码,把视频流发送到网络上。
在Windows和Linux上的VLC是使用C++/Qt编写的,提供了一致的用户体验。同时VLC还专门为OS X提供了原生版本,OS X版的 VLC的用户界面使用Cocoa框架编写,在OS X下拥有卓越的原生体验。
2、VLC编译环境配置
2.1、编译环境
系统:window7 32位;
编译软件:MSYS+MinGW。
2.2、编译环境配置
2.2.1、下载安装MSYS2
从官网(http://www.msys2.org/)下载最新的msys2,如下:
这里的们下载msys2-i686-20161025.exe对应win7 32位操作系统。
安装msys2-i686-20161025.exe,安装目录可选,这里我们选择D盘根目录,其他默认即可。最终在D盘下有msys32目录。
打开visual studio命令行工具,这里推荐visual studio2013及以上版本,如下:
在命令行中进入d:/msys32目录,而后执行msys2_shell.cmd --mingw32命令即可启动msys2,如下:
启动msys2的界面如下:
在msys2命令行界面执行命令:
pacman -S git subversion cvs automake autoconf libtool m4 make gettext pkg-config mingw-w64-i686-lua findutils mingw-w64-i686-headers yasm patch
这里会下载一些必要的编译工具。提示是否安装时输入Y选择安装即可。
2.2.2、下载mingw-w64
下载mingw-w64压缩包,解压之,将内部mingw32整个文件夹复制到D:\msys32\目录中,若文件存在选择替换即可。
最后重启msys2命令行界面。检测相应的gcc版本是否安装成功。运行命令:gcc --v,显示结果如下:
至此交叉编译VLC的编译环境就配置完成了。
在这里,给大家重点推荐一下我的几个热门畅销专栏,欢迎订阅:(博客主页还有其他专栏,可以去查看)
专栏1: (该精品技术专栏的订阅量已达到580多个,专栏中包含大量项目实战分析案例,有很强的实战参考价值 ,广受好评!专栏文章已经更新到200篇以上,持续更新中!欢迎订阅!)
C++软件调试与异常排查从入门到精通系列文章汇总(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/article/details/125529931
本专栏根据多年C++软件异常排查的项目实践,系统地总结了引发C++软件异常的常见原因以及排查C++软件异常的常用思路与方法 ,详细讲述了C++软件的调试方法与手段,以图文并茂的方式给出具体的项目问题实战分析实例(很有实战参考价值),带领大家逐步掌握C++软件调试与异常排查的相关技术,适合基础进阶和想做技术提升的相关C++开发人员!
考察一个开发人员的水平,一是看其编码及设计能力,二是要看其软件调试能力 !所以软件调试能力(排查软件异常的能力)很重要,必须重视起来!能解决一般人解决不了的问题,既能提升个人能力及价值,也能体现对团队及公司的贡献!
**专栏中的文章都是通过项目实战总结出来的,包含大量项目问题实战分析案例,有很强的实战参考价值!**专栏文章还在持续更新中,预计文章篇数能更新到200篇以上!
专栏2: (本专栏涵盖了C++多方面的内容,是当前重点打造的专栏,订阅量已达220多个,专栏文章已经更新到480多篇,持续更新中!欢迎订阅!)
C/C++实战进阶(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/category_11931267.html
以多年的开发实战为基础,总结并讲解一些的C/C++基础与项目实战进阶内容,以图文并茂的方式对相关知识点进行详细地展开与阐述!专栏涉及了C/C++领域多个方面的内容,包括C++基础及编程要点(模版泛型编程、STL容器及算法函数的使用等)、数据结构与算法、C++11及以上新特性(不仅看开源代码会用到,日常编码中也会用到部分新特性,面试时也会涉及到)、常用C++开源库的介绍与使用、代码分享(调用系统API、使用开源库)、常用编程技术(动态库、多线程、多进程、数据库及网络编程等)、软件UI编程(Win32/duilib/QT/MFC)、C++软件调试技术(排查软件异常的手段与方法、分析C++软件异常的基础知识、常用软件分析工具使用、实战问题分析案例等)、设计模式、网络基础知识与网络问题分析进阶内容等。
专栏3:
C++常用软件分析工具从入门到精通案例集锦汇总(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/article/details/131405795
常用的C++软件辅助分析工具有SPY++、PE工具、Dependency Walker、GDIView、Process Explorer、Process Monitor、API Monitor、Clumsy、Windbg、IDA Pro等,本专栏详细介绍如何使用这些工具去巧妙地分析和解决日常工作中遇到的问题,很有实战参考价值!
专栏4:
VC++常用功能开发汇总(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/article/details/124272585
将10多年C++开发实践中常用的功能,以高质量的代码展现出来。这些常用的高质量规范代码,可以直接拿到项目中使用,能有效地解决软件开发过程中遇到的问题。
专栏5: (本专栏涵盖了C++多方面的内容,是当前重点打造的专栏,专栏文章已经更新到260多篇,持续更新中!欢迎订阅!)
C++ 软件开发从入门到实战(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/category_12695902.html
根据多年C++软件开发实践,详细地总结了C/C++软件开发相关技术实现细节,分享了大量的实战案例,很有实战参考价值。
3、编译VLC
登陆VLC官网下载VLC,这里我们选择VLC2.2.4版本的源码。下载并解压,这里我们解压到桌面上,如下:
我们利用visual studio2013本机命令提示工具启动msys2。进入桌面vlc工程目录,如下:
打开网址:http://download.videolan.org/pub/videolan/contrib/i686-w64-mingw32/,下载vlc编译所需的第三方库。我们选择vlc-contrib-i686-w64-mingw-20160121.tar.bz下载,这里我们不要选择最新的第三方库。将下载好的压缩包更名为vlc-contrib-i686-w64-mingw-latest.tar.bz,在vlc\contrib目录中创建一个win32目录,将更名后的第三方库压缩包复制到vlc\contrib\win32目录中。
在msys2命令行中依次执行如下命令,如下:
cd contrib/win32
../bootstrap --build=i686-w64-mingw32
make prebuilt
完成上面三个命令后继续在msys命令行界面中执行如下命令,如下:
cd ../../:进入vlc的根目录。
./bootstrap
执行到最后会显示:Successfully bootstrapped,表示成功。
继续在msys命令行界面中执行执行如下命令,如下:
mkdir win32
cd win32
sh ../extras/package/win32/configure.sh --host=i686-w64-mingw32 --disable-nls --disable-debug --enable-shared
继续在msys2命令行界面中执行执行如下命令:
make --i
make package-win-common --i
命令执行结束,我们会看到在vlc\win32\目录中会有一个vlc-2.2.4文件夹,我们编译好的vlc就被打包在这个文件夹中,最后我们要注意,此次编译还缺少QT界面库,因此我们在运行编译好的vlc.exe时不会有反应,因此我们可以从vlc安装后plugins\gui文件夹中拷贝libqt4_plugin.dll库到我们编译打包好的vlc-2.2.4\plugins\gui文件夹中。一切就绪,再次运行vlc.exe,此时界面如图下:
接下来测试所编译的vlc是否正常,我们用官方的vlc作为串流服务器,用我们编译的vlc作为客户端接收播放,如下:
测试结果OK,同样,本地视频播放测试OK,至此,vlc编译成功。
4、VLC库的裁剪
我们在利用vlc的库做二次开发时,往往要剔除我们不需要的功能模块,vlc各模块功能比较独立,我们在开发的时候如果不需要只需剔除不需要的库即可,但是vlc组件libavcodec_plugin.dll是一个关键的库,内部实现很多音视频的编解码功能,大部分关于音视频开发都需要依赖该库,如果不经裁剪该库会显的较为庞大和累赘,如下:
那么我们该怎么裁剪呢?其实vlc组件libavcodec_plugin.dll是依赖ffmpeg开源库编译出来的,该组件的音视频的编解码功能都是由ffmpeg开源库中而来,因此对该库的裁剪就转而对ffmpeg库的裁剪,我们可以看看vlc官方给我们提供的ffmpeg库的大小,如下:
从图中我们可以看到vlc官方给我们提供的vlc库很庞大,因此裁剪vlc中libavcodec_plugin.dll库就必须裁剪ffmpeg的库。
从ffmpeg官网下载ffmpeg-2.8.12源码压缩包(注:不能选3.0及以上版本的源码,因为与vlc官方提供的ffmpeg库不匹配会导致vlc编译失败)。将源码解压至桌面,如下:
利用visual studio2013 x86命令行提示工具启动msys2,在msys2的命令行界面执行如下命令,如下:
cd /c/Users/WenKai/Desktop/ffmpeg-2.8.12
./configure --arch=x86 --target-os=mingw32 --pkg-config=pkg-config --disable-debug --disable-doc --disable-ffplay --disable-ffprobe --disable-ffserver --disable-avdevice --disable-doc --disable-symver --disable-encoders --disable-muxers --disable-demuxers --disable-parsers --disable-bsfs --disable-protocols --disable-indevs --disable-outdevs --disable-filters --disable-decoders --enable-decoder=h264 --enable-decoder=hevc --enable-decoder=aac --enable-muxer=mp4 --enable-muxer=rawvideo --enable-encoder=rawvideo --enable-protocol=file --disable-protocol=rtmp --enable-muxer=rawvideo
这里我们利用./configure 配置命令禁掉了很多关于编解码的模块编译,这里只做示例,具体裁剪需要视具体工程项目开发需求而定。
在msys2命令行中继续执行以下命令:
make
make install
编译成功之后我们在msys32\usr\local\目录中可以看到编译后的ffmpeg库及头文件,我们看看ffmpeg裁剪后的库的大小,如下:
比起之前官方提供的库小了很多,接下来要做的是替换官方提供的第三方关于ffmpeg的库,进入vlc\contrib\i686-w64-mingw32\目录,将裁剪后的ffmpeg安装目录下的lib文件,include文件替换vlc\contrib\i686-w64-mingw32\目录中已存在的文件。
接下来重新编译vlc(重复3、编译vlc中的步骤),编译完成后我们重新进入vlc-2.2.4\plugins\codec目录下查看libavcodec_plugin.dll,如下:
对比之前的编译的vlc中libavcodec_plugin.dll库小了近80M。
至此vlc裁剪工作结束。
5、总结
VLC的源码不同的版本可能在编译过程上略有不同,本文针对的是vlc-2.2.4版本的工程源码,通过对VLC所依赖的FFmpeg库裁剪从而达到给VLC库瘦身的目的。本文可作为编译VLC源码和FFmpeg源码的主要参考,为工程项目开发中引入VLC库或者FFmpeg库奠定基础。