文档库

最新最全的文档下载
当前位置:文档库 > Gstreamer培训资料

Gstreamer培训资料

——配置及使用 ——配置及使用
研究发展部
Gstreamer
2010-6-24
506116797
1

? ? ? ? ? ?
Gstreamer 是什么 Gstreamer的组成结构 Gstreamer的组成结构 Gstreamer的通信机制 Gstreamer的通信机制 Gstreamer怎样配置安装 Gstreamer怎样配置安装 怎么使用Gstreamer 怎么使用Gstreamer 怎么编写Gstreamer 怎么编写Gstreamer插件 Gstreamer插件
2010-6-24
506116797
2

Gstreamer 是什么
Gstreamer : 是linux上的开源的(Multi-media Framework) 多媒体应用框架 实现语言: C语言 面向对象: Glib
Glib浅析
GObject对象系统
Glib工具集
基本设计思想: 来自于俄勒冈(Oregon)研究生学院有关视频管道的创意, 同时也借鉴了 DirectShow的设计思想, 使得在同一框架下编写任意类型的流媒体应用程序成为 了可能 。在编写处理音频、视频或者两者皆有的应用程序时, 变得非常简单。同 时GStreamer并不受限于音频和视频处理, 它能够处理任意类型的数据流。 最显著的用途:1. 2. 3. 4. 构建音视频播放器 编辑音视频文件 音视频格式转换 流媒体服务
2010-6-24
506116797
3

Gstreamer 是什么
版本发布历史: 0.0.1 – 10th 0.3.0 – 12th 0.4.0 – 5th 0.6.0 – 1st 0.8.0 – 16th 0.10.0 - 5th June 1999 Dec 2001 July 2002 Feb 2003 March 2004 Dec 2005
最新版本: gstreamer-0.10.29 27-Apr-2010 当前使用: gstreamer-0.10.28 08-Mar-2010 下载地址:http://www.wendangku.net/doc/a8ab3f58bb68a98271fefaaf.html/src/ 网站: http://www.wendangku.net/doc/a8ab3f58bb68a98271fefaaf.html/ http://www.wendangku.net/doc/a8ab3f58bb68a98271fefaaf.html/
2010-6-24
506116797
4

Gstreamer的组成结构 Gstreamer的组成结构(整体构架) 整体构架)
Gstreamer Tools gst-inspect gst-launch gst-editor Media Player Gstreamer Applications VoIP & Video Conference Streaming Server Video Editor (….)
Gstreamer Core Framework
多媒体应用接口 插件构架 管道构架 媒体类型协商机制 150多个插件 一些工具集
3rd Part Plugins
2010-6-24
506116797
5

Gstreamer的组成结构 Gstreamer的组成结构(文件系统) 文件系统)
模块 gstreamer gst-plugins-base gst-plugins-good gst-plugins-ugly gst-plugins-bad gst-plugins-gl gst-ffmpeg gnonlin gst-python gstreamer-sharp gst-rtsp-server gst-plugins gst-editor gst-recorder gst-monkeysaudio
2010-6-24
描述 core library and elements an essential exemplary set of elements
stable version 0.10.29 0.10.29
a set of good-quality plug-ins under our 0.10.23 preferred license, LGPL a set of good-quality plug-ins that might pose 0.10.15 distribution problems a set of plug-ins that need more quality plug-in and helper libraries for OpenGL integration FFmpeg-based plug-in Non-linear editing elements python bindings C#/.NET bindings RTSP server additional elements graphical pipeline editor audio/video recorder Monkey's Audio plug-in
506116797
0.10.19 0.10.1 0.10.10 0.10.15 0.10.18 0.9.2 0.10.5 0.8.12 0.8.0 N/A 0.8.0
6

Gstreamer的组成结构 Gstreamer的组成结构(组成元素) 组成元素)
Elements 具有一定功能的基本单元。
Bins
有多个基本单元组成的一个高级的功能单元。
Pipeline
最高等级的Bin
Pads
不同Elements之间的链接点
Caps
Pad的属性描述
2010-6-24
506116797
7

Gstreamer的组成结构 Gstreamer的组成结构(组成元素) 组成元素)
Elements
具有一定功能的基本单元。
udpsrc rtph264depay
接受UDP数据 (source 产生数据)
H264的RTP 拆包(filter) (rtp+ h264包) (h264 包) 打TS包(filter) (h264包) (TS包)
mpegtsmux
filesink
把数据存入文件 (sink 消耗数据)
2010-6-24
506116797
8

Gstreamer的组成结构 Gstreamer的组成结构(组成元素) 组成元素)
Bins
有多个基本单元组成的一个高级的功能单元。
Net_To_File_Bin udpsrc rtph264depay mpegtsmux filesink
2010-6-24
506116797
9

Gstreamer的组成结构 Gstreamer的组成结构(组成元素) 组成元素)
Pipeline
最高等级的Bin。
New_Pipeline_0
udpsrc
rtph264depay
mpegtsmux
filesink
New_Pipeline_1 Net_To_File_Bin_1 udpsrc1 rtph264depay1 mpegtsmux1 filesink1
Net_To_File_Bin_n Udpsrc_n
2010-6-24
Rtph264depay_n
506116797
Mpegtsmux_n
Filesink_n
10

Gstreamer的组成结构 Gstreamer的组成结构(组成元素) 组成元素)
Pad
不同Elements之间的链接点
udpsrc
rtph264depay
mpegtsmux
filesink
三种不同类型的elements
src:
产生数据
Source类型 只有一个 src Pad Sink类型 只有一个 sink Pad 有一个src多个sink pad(demux) 有多个src一个sink pad(mux)
sink:消耗数据
Fileter类型
2010-6-24
506116797
11

Gstreamer的组成结构 Gstreamer的组成结构(组成元素) 组成元素)
Caps
s i n k
Pad的属性描述
s r c
udpsrc Any
rtph264depay
s r c
s i n k
mpegtsmux
s r c
s i n k
filesink Any
Capabilities: application/x-rtp media: video payload: [ 96, 127 ] clock-rate: 90000 encoding-name: H264
Src Capabilities: video/x-h264
Sink Capabilities: video/mpeg video/x-dirac video/x-h264 audio/mpeg audio/x-lpcm audio/x-ac3 audio/x-dts
Capabilities: video/mpegts
2010-6-24
506116797
12

Gstreamer的组成结构 Gstreamer的组成结构(通信机制) 通信机制)
Msg: 错误 警告 消息 Event: 管道控制 Signal: 插件控制 Application Probe Send Message1 Bus Event Signal Quary
Up
Down
New_Pipeline_0
udpsrc Buffer
2010-6-24
rtph264depay Buffer
506116797
mpegtsmux Buffer
Multiudp sink
13

Gstreamer的安装配置 Gstreamer的安装配置
操作系统 Red Hat Enterprise Linux 5 (linux 2.6.18)
1. flex-2.5.31.tar.gz linux下:文本模式识别 2. liboil-0.3.16.tar.gz 根据CPU,编译器进行代码优化 3. glib-2.20.5.tar.gz Glib开发库 安装:./configure prefix=/use & make & make install 配置:在etc/ld.so.conf 加入: /usr/local/lib /usr/lib /lib
第三方库
setup.sh
Gstreamer
1. gstreamer-0.10.28.tar.gz 核心代码 2. gst-plugins-base-0.10.28.tar.gz 基本插件 3. gst-plugins-good-0.10.21.tar.gz 质量好的插件 4. gst-plugins-bad-0.10.18.tar.gz 质量差的插件 5. …… 安装:./configure & make & make install 配置:.bashrc添加环境变量 PKG_CONFIG_PATH=/usr/local/lib/gstreamer-0.10/pkgconfig :/usr/local/lib/pkgconfig :/usr/lib/pkgconfig:/usr/local/ export PKG_CONFIG_PATH
506116797 14
2010-6-24

Gstreamer的使用 Gstreamer的使用(工具包) 工具包)
查询插件信息:
gst-inspect
1. 2. 3. 4.
无参数:列出所有的已安装的插件 插件名:打印出该插件详细的属性信息 -a : 打印所有已安装的插件的属性信息 more: -h 查看帮助
建立并运行一个基本的pipeline: 1. 和shell 命令相似,可以直接把插件作为输入参数,构成一个基本 的pipeline并让它播放。 2. 也可以用来编写测试脚本,测试插件功能。 优点:简单,易用。 缺点:在运行过程中无法控制pipeline,也无法获取pipeline内部状态。
gst-launch
2010-6-24
506116797
15

Gstreamer的使用 Gstreamer的使用
命 令 行 脚 本 C 语 言 其 他
2010-6-24
gst-launch -v filesrc location="vojna.mp3" ! mad ! audioconvert ! alsasink
mp3Play.sh
gstMp3Player.c
gcc -Wall $(pkg-config --cflags --libs gstreamer-0.10) -o gstMp3Player gstMp3Player.c
C# Python Gstreamer Editor
506116797 16

Gstreamer插件的编写 Gstreamer插件的编写
Pipeline的运行状态
GST_STATE_NULL 默认状态:没有分配任何资源,没有载入插件,不能处理数据。
GST_STATE_READY
预备状态:分配或载入所有与流无关的资源。(非硬件资源) 暂停状态:准备好全部资源,接受数据流,只是sink element暂 停,收到数据不处理,只是block。
GST_STATE_PAUSED
GST_STATE_PLAYING
播放状态:准备好全部资源,接受并处理数据流。
2010-6-24
506116797
17

Gstreamer插件的编写 Gstreamer插件的编写
1. 手动编写 2. 模板生成
http://www.wendangku.net/doc/a8ab3f58bb68a98271fefaaf.html/gstreamer/gst-template/commit/
./make_element myfilter (gstplugin.c )
gstmyfilter.h
gstmyfilter.c
2010-6-24
506116797
18

Gstreamer插件的编写 Gstreamer插件的编写
GObject系统中需要定义的初始化函数: **_base_init() 初始化类结构:1. 定义父类;2. 定义类成员(子类)3. 类详细信息 定义类成员变量: **_class_init() 1. 定义信号及其响应函数;2. 定义虚函数; 等等 初始化实例: **_init() 1. 类似C++中的构造函数,对包括Pads在内的内部变量或虚函数进 行初始化。 **_set_property(): 设置属性的虚函数 **_set_property() **_get_property() **_get_property(): **_set_caps() **_set_caps(): **_chain() **_chain();
2010-6-24
获取属性的虚函数 设置某Pad的Caps的虚函数 filter 中处理数据的核心函数(虚函数)
506116797 19