一、安装

1、安装包的获取

我们需要下面两个安装包

GStreamer-WinBuilds-GPL-x86.msi

GStreamer-WinBuilds-SDK-GPL-x86.msi

安装包可以从如下链接处获取

http://code.google.com/p/ossbuild/

另外从其他的介绍中了解GStreamer的运行需要Python,所以最好先安装Python。由于我的机器上已经安装Python2.6(C:\Python26),我并没有验证GStreamer是否可以脱离Python运行。

2、安装

先安装GStreamer-WinBuilds-GPL-x86.msi,直接运行安装包,选上全部组件。再安装SDK,选择全部组件,SDK将被直接到GStreamer-WinBuilds-GPL-x86.msi的安装目录下。

可以使用gst-lauch工具验证一下是否成功安装,可以使用gst-launch filesrc location= D:\\MPEG-1.mpg ! decodebin ! ffmpegcolorspace ! autovideosink测试一下是否可以播放(其中MPEG-1.mpg在文档的附件中可以找到)。Gst-launch使用很有用的工具,类似于graphedit于Directshow,gst-lauch的使用也可以参考gst-lauch。

3、playbin

感觉使用playbin有点类似于DirectShow中的RenderFile,GStreamer框架依据当前系统的一些配置直接给用户建立Pipeline,可以使用launch-gst来使用playbin,例如: gst-launch –v playbin uri=file:///D:\\work\\mpeg-1.mpg,其中-v可以打印出pipeline建立的一些细节,对于我们使用GStreamer有一定帮助,当然也可以在source code中使用playbin,具体可以参考GStreamer Application Development Manual。类外还有Decodebin,可以智能的建立decode的pipeline,在安装章节就是用了decodebin。

二、Sample Code的编译

1、VC环境设置

我使用的是VS2008。

由于编译GStreamer程序需要用用到一些library和include,所以在VC的Options中设置一下相关的目录方便编译。具体如下,目录依据各自的安装情况。

2、Application

使用VC创建一个Win32的Win32 ConsoleApplication工程,在source文件中加入#include "gst\gst.h",这样便可以使用GStreamer的一些API了,在具体工程的Properties中加入具体使用的GStreamer库,具体如下:

详细代码可以参考文档的附件。

3、Filter

GStreamer的filter通过plugin的形式注册到Framework中的,Gstreamer提供了一个工具gst-template可以快速的生成Plugin的框架,可以在下面的地址下载http://cgit.freedesktop.org/gstreamer/gst-template/commit/,是Linux版本的,目前我没有找到Windows版本的。在Linux系统中直接解压缩后进入gst-template-master\gst-plugin\src目录,然后运行../tools/make_element MyFilter,则在src目录中生成gstmyfilter.c和gstmyfilter.h两个文件。在Windows系统中创建一个名字为MyFilter的 Win32 Project,Application type选择DLL,删除MyFilter.cpp文件,将生成的gstmyfilter.c和gstmyfilter.h文件拷贝到工程目录下,将gstmyfilter.c改为gstmyfilter.cpp,并将这两个文件加入到工程中。在gstmyfilter.cpp文件中加入一行#include "stdafx.h"。在GST_PLUGIN_DEFINE的前面定义VERSION,如下:#define VERSION "0.1", 由于编译器的问题生成的代码在gst_my_filter_class_init函数中还有一个类型转换的错误,进行一下强制转换即可,如:

在工程中加入相应的Lib引用,

编译应该OK了。将生成的MyFilter.dll拷贝到gstreamer的安装路径的\v0.10.6\lib\gstreamer-0.10目录下,如果在命令行下运行gst-inspect myfilter能够打印出相关的plugin信息,那么祝贺你,你的第一个gstreamer plugin应该成功加载了,其实我们什么也没有做。也可以使用如下方式进行验证:gst-launch filesrc location= D:\\ MPEG-1.mpg ! myfilter ! decodebin ! ffmpegcolorspace !autovideosink。具体可以参看GStreamer PluginWriter’s Guide文档。

三、GStreamer基础

1、Plugin之生

类似于其他的许多Framework,GStreamer的Plugin也是定义了一些用于Framework调用的回调接口,在你的Plugin中实现这些接口就可以了,当然使用Macro是一种非常简洁和优雅的选择。最重要的就是GST_BOILERPLATE了,将其完全展开如下图,大家可以看到一个宏就将我们Framework需要的几个接口定义出来了。暴露一个gst_my_filter_get_type接口Framework就可以找到我们写的Plugin了。

/*myfilter.c*/

GST_BOILERPLATE (GstMyFilter, gst_my_filter, GstElement,GST_TYPE_ELEMENT);

/*gstutils.h*/

#define GST_BOILERPLATE(type,type_as_function,parent_type,parent_type_macro)      \

GST_BOILERPLATE_FULL (type, type_as_function, parent_type, parent_type_macro,   \

__GST_DO_NOTHING)

#define GST_BOILERPLATE_FULL(type, type_as_function, parent_type, parent_type_macro, additional_initializations)

/*expand GST_BOILERPLATE code*/

static void gst_my_filter_base_init (gpointer      g_class);

static void gst_my_filter_class_init (GstMyFilterClass *g_class);

static void gst_my_filter_init (GstMyFilter  *object, GstMyFilterClass *g_class);

static GstElementClass *parent_class = NULL;

static void gst_my_filter_class_init_trampoline (gpointer g_class,gpointer data)

{

parent_class = (GstElementClass *) g_type_class_peek_parent (g_class);

gst_my_filter_class_init ((GstMyFilterClass *)g_class);

}

GType gst_my_filter_get_type (void);

GType gst_my_filter_get_type (void)

{

/* The typedef for GType may be gulong or gsize, depending on the

* system and whether the compiler is c++ or not. The g_once_init_*

* functions always take a gsize * though ... */

static volatile gsize gonce_data = 0;

if (g_once_init_enter (&gonce_data)) {

GType _type;

_type = gst_type_register_static_full (GST_TYPE_ELEMENT,

g_intern_static_string ("GstMyFilter"),

sizeof (GstMyFilterClass),

gst_my_filter_base_init,

NULL,            /* base_finalize */

gst_my_filter_class_init_trampoline,

NULL,            /* class_finalize */

NULL,               /* class_data */

sizeof (GstMyFilter),

0,                  /* n_preallocs */

(GInstanceInitFunc) gst_my_filter_init,

NULL,

(GTypeFlags) 0);

additional_initializations (_type);

g_once_init_leave (&gonce_data, (gsize) _type);

}

return (GType) gonce_data;

}

三、附件

http://blog.csdn.net/dj0379/archive/2010/07/21/5753511.aspx

http://blog.csdn.net/dj0379/archive/2010/07/22/5754953.aspx

GStreamer - On Windows相关推荐

  1. gstreamer(一)入门和概述

    一.概述 在音视频领域接触最多实现的方案通常是通过ffmpeg(PC和sever端居多)或者硬件厂家的的SDK实现特定硬件的编解码功能(机顶盒,电视等嵌入式设备).这里我们介绍一个在国内不太常用的解决 ...

  2. 在Livemedia的基础上开发自己的流媒体客户端

    在Livemedia的基础上开发自己的流媒体客户端V 0.01 桂堂东 一.背景... 3 二.Livemedia框架介绍... 4 1.总体框架... 4 2.客户端框架... 4 2.1 客户端o ...

  3. 从零开始成为GStreamer专家——基于Windows的GStreamer从源码下载、编译到开发

    基于Windows的GStreamer从源码下载.编译到开发 本文介绍了在GStreamer下载方法, 使用过程中的部分依赖,以及在Windows上编译配置GStreamer 过程,为学习GStrea ...

  4. GStreamer Windows 基辅4:时间走廊——只有向前,或者向后,没有上下,二、度、空、、间、、、

  5. 多平台Gstreamer Multiplatform

    多平台Gstreamer Multiplatform GStreamer可在所有主要操作系统上运行,例如Linux,Android,Windows,Max OS X,iOS,以及大多数BSD,商业Un ...

  6. GStreamer 1.18.4稳定的错误修复版本

    GStreamer 1.18.4稳定的错误修复版本 GStreamer团队宣布最喜欢的跨平台多媒体框架的稳定的1.18版本系列中的另一个错误修复版本! 此版本仅包含错误修复和重要的安全修复程序,并且从 ...

  7. GStreamer跨平台多媒体框架

    GStreamer跨平台多媒体框架 Gstreamer基本概念 GStreamer是用于构造媒体处理组件图的库.它支持的应用程序范围从简单的Ogg / Vorbis回放,音频/视频流到复杂的音频(混合 ...

  8. GStreamer 入门 - Hello,World

    GStreamer 是一个用于构建媒体处理组件图(也可以称为 pipeline,或管道)的库.它支持的应用非常广泛,从简单的 Ogg/Vorbis 播放,音频/视频流到复杂的音频(混音)和视频(非线性 ...

  9. 音频视频解决方案:GStreamer/ffmpeg/ffdshow/directshow/vfw

    音频视频编程相关:GStreamer/ffmpeg/directshow/vfw linux和window下几种流行的音频视频编程框架作一个总结,防止自己迷惘,免于晕头转向. 一.GStreamer ...

最新文章

  1. SVM+二分类+多分类
  2. Atutor、 Claroline、 Moddle及Sakai号称为四大开源课程管理系统
  3. sequelize 连接2个数据库_数据库激荡 40 年,NoSQL、NewSQL谁能接棒?
  4. 解析Python中的条件语句和循环语句
  5. sql的加减乘除运算_SQL简单查询语、运算符学习和练习
  6. java关闭文本_如何更优雅的关闭java文本、网络等资源
  7. 在Eclipse中配置DOS(cmd)窗口
  8. 【Android综合编程】CH2EventBus
  9. 树莓派4B 安装卸载pip、pip3
  10. 香港云服务器安全吗?
  11. RuoYi-flowable工作流管理
  12. C#调用Onnx模型
  13. 车金融|金融产品规则引擎的前世今生(下篇)
  14. 爬虫有道词典,高精度加密版
  15. 大华摄像头视频接入(一)
  16. 2022国产车排行榜前十名
  17. 有了这25个正则表达式,代码效率提高80%
  18. 金明的预算budget题解
  19. Linux关机时执行指定脚本
  20. Unity Shader PostProcessing - 5 - PixelSyle 像素化风格

热门文章

  1. 安装wpa_supplicant工具
  2. WDM在不同Windows版本上的音频支持
  3. 新旧电脑间文件互传(通过网络)
  4. Treasure Project(藏宝计划)冲刺百倍!
  5. Dubbo分布式事务处理--视频教程
  6. 支持国产ARM64架构部署,支持使用rz、sz命令上传下载文件,JumpServer堡垒机v2.12.0发布
  7. excel表格如何拆分数据
  8. one-hot编码例子介绍
  9. 单链表一元多项式求和java_计算一元多项式的相加
  10. 大数据Impala系列之初识Impala