关闭

在Windows平台上建立GStreamer开发环境

569人阅读 评论(0) 收藏 举报

GStreamer是一个跨平台的多媒体开发框架(http://gstreamer.freedesktop.org/),不过由于在Windows平台上已经有了成熟的DirectShow,因此其在Linux平台上更加受到追捧,在Linux上的地位也与DirectShow在Windows上的地位相当。GStreamer中的很多概念与DirectShow中的相似,很多设计也借鉴了DirectShow,似乎找不到在Windows平台上应用它的理由。但是仔细考虑一下,还是会发现研究它的诸多好处:

    1、GStreamer是跨平台的,如果想开发更加通用的应用程序,无疑是目前最有效率的框架;

    2、GStreamer框架是基于插件的,开发、扩展与维护都非常方便,相对于DirectShow的COM框架,插件更小巧灵活,更具通用性,限制更少;

    3、GStreamer是纯C代码开发,采用GObject编程模式,依附于GLib2.0对象模型,编译文件小巧,运行速度快,并且为框架加入了RTII特性;

    4、很多特色设计:插件和管道信息都可以用XML标准格式进行存储、命令行形式的调试与测试、API的多种语言绑定、众多特色的插件以及gnonlin,gst-editor,gst-recorder等特色模块;

    5、众多建立在GStreamer框架上的优秀开源项目,给我们提供了绝好的应用例子,也许哪天手痒了,可以自己开发一个:)

    当然,GStreamer相对DirectShow来说也有它不足的地方,需要我们大家继续努力加以完善。

 

    遗憾的是在Windows平台上进行GStreamer应用与开发目前还不是一件很简单的事情,尤其是对于GNU开发了解不是很多的朋友来说。如果只是进行应用的话,可以直接用GStreamer提供的安装程序进行安装,但是安装程序并不是随代码及时更新的(有一个叫做GStreamer WinBuilds的项目专门做这件事,我试了一下好像不是很好用);如果要进行GStreamer开发的话,就是一件比较麻烦的事情了,这篇文章将讨论这个问题。

    在Windows平台上建立GStreamer开发环境,需要配置相应的.dll二进制文件、.h头文件和.lib库文件,设置系统环境变量,以及为开发环境指定编译链接文件路径。二进制运行文件可以直接安装,也可以自己编译。开发环境常用的2种编译器为:GCC和MSVC。若用GCC作为编译器,则需要在Windows平台上建立MSYS/MinGW环境;但对于大多数Windows平台开发人员来说,还是熟悉MSVC,本文主要介绍这一种。

 

    一、用OABuild编译GStreamer(http://people.collabora.co.uk/~oleavr/OABuild/
    GStreamer的开发组推荐用这种方法,它可以方便快捷的编译GStreamer, GTK+, D-Bus, Telepathy等模块,不用安装MinGW/cygWin环境。OABuild是专为Windows平台开发人员进行开源项目开发提供的一个工具,为很多GNU库提供了Windows下.NTE环境的绑定,可以直接对这些库进行编译。用户通过bzr工具在线安装OABuild后,执行bootstrap脚本,即可自动调用cvs或svn下载相应版本的库源码,并通过python或perl执行相应脚本,完成整个项目的.NET工程及环境配置。完成后用户只要打开OABuild.sln进行编译就可以得到所需的.h文件、.lib文件和.dll文件。OABuild项目有两个版本,v1已经不再维护,在MSVS2005上用,v2在MSVS2008上用,目前OABuild已经被OAH项目代替.由于我的机器上只有05,所以我只试了v1版,出现几个库的代码下载失败的问题。

    二、用GStreamer提供的安装文件安装,手动配置开发包
    GStreamer提供了Win32的安装包,具体建立步骤如下。
    1、下载GTK+2.0 bundle包,其中包括了GTK在Windows下运行依赖的第三方库以及GTK+ runtime运行文件及开发包。下载地址:http://www.gtk.org/download-windows.html然后将文件解压缩到一个路径下面,并将bin路径加到PATH环境变量中。在shell中运行pkg-config --cflags gtk+-2.0命令,再运行gtk-demo命令,会出现一个测试程序检验是否可以正常运行。若想使界面为Windows风格,建立一个文件etc/gtk-2.0/gtkrc,在其中写上gtk-theme-name = "MS-Windows",保存就可以了。
    2、下载GStreamer各个模块的安装包以及开发包。下载地址:http://gstreamer.freedesktop.org/pkg/windows/releases/。GStreamer运行必须的3个模块为gstreamer、gst-plugins-base和gst-plugins-good。安装包直接按照顺序安装即可,自动安装到C:/Program Files/Common Files/GStreamer下,并会将bin的路径设置到PATH环境变量中;将所有开发包中的include和lib文件夹下的文件解压到一个统一路径下,用于给编译环境设置编译链接文件加载路径。
    3、下载libxml2包,libxml2是为Gnome项目开发的XML操作工具包,我们要下载Windows平台版本。下载地址:http://www.zlatkovic.com/pub/libxml/。将bin目录下的文件拷贝到GStreamer路径的bin文件夹下,将include、lib文件夹下的文件解压到GStreamer对应的include、lib路径下。
    4、下载win_iconv包,该库是用来完成字符编码转换的。下载地址:http://www.gtk.org/download-windows.html。文件的拷贝位置同上。
    5、下载libpng13.dll文件,最新的Gstreamer中调用的版本与GTK包中的版本不同,需要更新一下。下载地址:http://www.zhaodll.com/dll/l/200607/321.html。放到GStreamer路径的bin文件夹下。
   
    做完以上工作以后,GStreamer开发所需要的所有文件都已经有了。下面用一个简单的例子,来说明MSVC环境的配置,以及GStreamer开发的简单步骤。
    1、在MSVC2005中,新建一个名为GSTest的Win32控制台工程;
    2、在工程的属性中,添加GStreamer和GTK的头文件路径,添加GStreamer和GTK的库文件路径;
    3、在工程属性中,添加glib以及glibconfig的头文件路径,其分别在GTK的include目录下的glib-2.0文件夹,以及GTK目录下的/lib/glib-2.0/include文件夹;
    4、在工程属性中,设置引用的GStreamer库文件libgstreamer-xxx.lib,其中xxx为库的版本号,我的是libgstreamer-0.10.lib;
    5、在GSTest.cpp文件中,加入语句#include <gst/gst.h>即可访问GStreamer库函数了,下面为main函数代码:
    int _tmain(int argc, _TCHAR* argv[])
    {
       const gchar *nano_str;
       guint major, minor, micro, nano;

       gst_init (&argc, &argv);

       gst_version (&major, &minor, &micro, &nano);

       if (nano == 1)
         nano_str = "(CVS)";
       else if (nano == 2)
         nano_str = "(Prerelease)";
       else
         nano_str = "";

       printf ("This program is linked against GStreamer %d.%d.%d %s/n",
                                                   major, minor, micro, nano_str);

       return 0;
    }
    6、最后,MSVC2005的Win32控制台程序默认是Unicode字符集,将其改为多字节字符集,Build工程,在shell里运行GSTest.exe,得到运行结果
    “This program is linked against GStreamer 0.10.14 (CVS)”
   
    以上就是在Windows平台建立GStreamer开发环境的步骤,希望大家能共同探讨GStreamer,共同进步!

 

转自 http://blog.sina.com.cn/s/blog_48f93b530100c4sq.html~type=v5_one&label=rela_prevarticle

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:722618次
    • 积分:9287
    • 等级:
    • 排名:第2039名
    • 原创:94篇
    • 转载:604篇
    • 译文:1篇
    • 评论:99条
    文章分类
    最新评论