1.GStreamer是什么?GStreamer是一个开源的多媒体框架库。
利用它,可以构建一系列的媒体处理模块,包括从简单的ogg播放功能到复杂的音频(混音)和视频(非线性编辑)的处理。
应用程序可以透明的利用解码和过滤技术。
开发者可以使用简洁通用的接口来编写一个简单的插件来添加新的解码器或滤镜。
2.基于GStreamer 的一些软件所有软件按名称字母先后排列acastacast 是为个人声音设备和各种流服务器提供音频网络广播的软件,它有GTK+2 和控制台界面。
amaroKamaroK 是KDE的一个播放器。
avisynth 3.0Avisynth 3.0 是一个强大的视频帧服务器软件(video frameserver)。
BansheeBanshee 是一个基于Mono 的 GNOME 的一个音乐播放器。
BMPxBMPx 是一个基于 GTK+ 的音乐播放器,它有类似'Winamp'的界面。
BuzztardBuzztard 是一个类似Buzz和 FastTracker 的音乐软件。
Cupid一个基于GStreamer的录像软件, 当前正在开发中,它将能高效的同步记录音频、视频,保存在GStreamer 支持的任一格式。
关于 Dave/Dina 工程Dave/Dina 工程是一个关于播放和记录电视、多媒体等的机顶盒软件系统。
ElisaEinterface.lisa 是一个基于OpenGL的跨平台的媒体中心解决方案。
EinaEina 是一个传统的音频播放软件,它有一个基于 GTK2 的界面。
FlumotionFlumotion 是一个分布式流媒体服务器软件。
FUPlayerFUPlayer 是用Python 语言写的GNOME媒体播放器。
GampGamp 是一个基于GNOME的媒体播放器。
GeekcastGeekast 是一个用Ruby写的基于GNOME 的P2P 流媒体客户端软件。
GNOME MediaGNOME Media 用GStreamer 来进行声音控制、音频录制和CD播放。
GMediaRenderGMediaRender 作为upnp媒体服务器的客户端。
GooboxGoobox 是一个基于GNOME 的cd 播放软件和剪辑(ripper)软件。
GStreamer EditorGStreamer Editor 是拥有图形界面的管道构建编辑器。
IstanbulIstanbul 是一个屏幕记录器。
JamboreeJamboree 是Imendio开发的基于GNOME的音乐播放器。
JokosherJokosher 是一个多媒体音乐编辑器。
JuKJuK 是KDE桌面的一个音乐自动点唱器。
KaffeineKaffeine 是基于 KDE 的一个播放器。
LindeleLindele 是一个基于GNOME 的音乐播放器。
ListenListen 是用 Python写的一个GNOME下的音乐播放器。
LiveSupportLiveSupport 是一个无线电管理软件,它提供了具有混响装置的室内广播和远程广播的综合自动系统。
Marlinmarlin 是GNOME下的一个样本编辑器。
Monkey BubbleMonkey Bubble 是一个很有趣又很酷的GNOME下的一个游戏软件,它通过GStreamer播放音乐产生惊悚的或甜美的音响效果。
MuineMuine 是 GNOME 下使用 Mono 框架的一个音乐播放器。
NavysNavsys 是一个具有GPS 地图和音乐播放功能的软件。
它的音乐播放器是基于 GStreamer。
PaktPakt 是对GObjects的XML 抽像,通过它来监听和改变元件(element)状态和管道(pipeline)架构。
PermoviPermovi 是一个基于Linux 的 HTPC (Home Theatre PC)软件。
它将PC 信号转换到独立的 CD-player/tuner/DVD-player/PVR 设备。
Permovi使用的是Mono的框架。
PitiviPitivi是一个非线性视频编辑器,它通过GStreamer 的强大功能和Gnonlin 的非线性视频编辑库。
PlayerPlayer 是一个简单易用的播放哭,它的内部功能特征都是可见的。
RhythmboxRhythmbox 是一个综合的音乐管理软件,它的灵感来源于苹果的iTunes。
SerpentineSerpentine 是GNOME下的音频 cd 刻录软件。
SirenSiren 用perl写的一个 GTK2 下的轻量级音乐播放软件。
Sound ConverterSound Converter GNOME下的一个小型语音转换软件。
Sound JuicerSound Juicer 是GNOME下一个简洁,实用的 CD ripper。
SoundScrapeSoundScrape 是一个基于 GUILE scriptability 的音频合成组件。
TograTogra 是一个 3D 多媒体框架。
Quod LibetQuod Libet 是用 Python 写的GNOME下的一个音乐管理软件。
ThoggenThoggen 是一个高效的DVD 备份软件,它基于GStreamer,拥有一个漂亮的 GTK+ 界面,功能强大且容易使用。
TotemTotem 是 GNOME桌面系统的一个电影播放器。
TowelTowel 是一个基于GTKMM 的音乐播放器。
Video-WhaleVideo-Whale 是基于Gstreamer的video-wall的一个实现。
用GStreamer 构建video wall很容易,这篇文章通过图片向你介绍了怎么去做。
WaveMixerWaveMixer 是基于 gtkmm 和 GStreamer的多声道语音编软件。
WechselspielerWechselspieler 是一个艺术工具,用来将视频动作映射MIDI事件。
GStreamer 软件实验田AldegondeAldegonde 是一个简单的媒体播放器,它使得调试GStreamer的重放功能更加容易。
KissKiss 是基于KDE的一个简单的媒体播放器,对于想使用GStreamer的KDE开发者来说,它是一个很好的例子。
gst-scigst-sci 搜集了一些GStreamer的模式化插件(scientific plugins)。
3. 利用GStreamer开发应用程序Q: 怎么编译一个使用了GStreamer的程序?Q: 怎么通过末安装GStreamer拷贝(uninstalled GStreamer copy)来开发呢 ?Q: 怎么利用 GConf 来得到系统级默认调用(system-wide defaults) ? Q: 怎么调试libtool产生的奇怪的shell脚本?Q: 在GStreamer开发(gstreamer-devel)中为什么邮件交流这么慢(少) ? Q: GStreamer 采用什么类型的版本标签(version scheme)呢 ? ?Q: GStreamer内核采用什么样的代码风格(coding style) ?Q: 怎么编译一个使用了GStreamer的程序?A: GStreamer使用pkg-config 加一些参数来编译和链接软件。
pkg-config 已经广泛使用于GTK+, GNOME, SDL等;如果你对这命令很熟悉,知道如何设定,那么你就可以自己定制了。
如果你不知道如何用 pkg-config 来编译和链接一些单文件的小程序,那么请学习一下pkg-config 中--cflags 和--libs 这两个参数。
例如:$ libtool --mode=link gcc `pkg-config --cflags --libs gstreamer-0.10` -o myprog myprog.c 这对于只是基于 gstreamer 的程序已经足够了,但如果程序同时也用了GTK+ 2.0,那么你得这样:$ libtool --mode=link gcc `pkg-config --cflags --libs gstreamer-0.10 gtk+-2.0` -o myprog myprog.c 这些参数都是back-ticks (就像键盘上的每个键都一起合作都很重要), 不会单独的引用。
对于更大的项目,你得在Makefile 中集成pkg-config,或者用pkg.m4 macro 和 autoconf 集成一起。
Q: 怎么通过末安装GStreamer拷贝(uninstalled GStreamer copy)来开发呢 ?A: 利用末安装的GStreamer和插件的包(例如,能过CVS上的包)开发和编译是可以实现的。
最简单的办法是通脚本来实现(在bash下):#!/bin/bash -i # # this script is in CVS as gstreamer/docs/faq/gst-uninstalled # # set up environment to use and develop gstreamer and friends uninstalled # # set up PATH, LD_LIBRARY_PATH, PKG_CONFIG_PATH, GST_PLUGIN_PATH, MANPATH, # PYTHONPATH # # prefer uninstalled versions, but also put installed ones on the path # # this script assumes that the relevant modules are checked out one by one # under a given tree specified below in MYGST # # symlink this script in a directory in your path (for example $HOME/bin) # to a name that reflects the version of your checkout # # e.g.: # - mkdir $HOME/gst/head # - ln -sf gst-uninstalled $HOME/bin/gst-head # - checkout copies of gstreamer modules in $HOME/gst/head # - gst-head # this script is run -i so that PS1 doesn't get cleared # change this variable to a different location depending on where you # store your cvs checkouts MYGST=$HOME/gst # extract version from $0 # if this script is called "gst-head" then version will be"head" VERSION=`echo $0 | sed s/.*gst-//g` # base path under whichdirs are installed GST=$MYGST/$VERSION if test ! -e $GST; thenecho "$GST does not exist !" exit fi # set upa bunch of paths PATH=$GST/gstreamer/tools:$GST/gst-plugins/tools:$GST/gst-player/src:$GST/gst-editor/src:$GST/prefix/bin:$PATH # /some/path: makes the dynamiclinker look in . too, so avoid thisLD_LIBRARY_PATH=$GST/prefix/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PA for path in audio cdda interfaces netbuffer riff rtp tag video doLD_LIBRARY_PATH=$GST/gst-plugins-base/gst-libs/gst/$path/.libs:$LD_LIBRARY_PATH done for path in base netcheck controller dataprotocol doLD_LIBRARY_PATH=$GST/gstreamer/libs/gst/$path/.libs:$LD_LIBRARY_PATH doneLD_LIBRARY_PATH=$GST/gstreamer/gst/.libs:$LD_LIBRARY_PATHexport LD_LIBRARY_PATH exportPKG_CONFIG_PATH=$GST/prefix/lib/pkgconfig:$GST/gstreamer/pkgconfig:$GS plugins/pkgconfig:$GST/gst-plugins-base/pkgconfig:$GST/gst-plugins-good/pkgconfig:$GST/gst-python/pkgconfig:$PKG_CONFIG_PATHexport GST_PLUGIN_PATH=$GST/gstreamer:$GST/gst-plugins:$GST/gst-plugins-base:$GST/gst-plugins-good:$GST/gst-plugins-ugly:$GST/gst-plugins-bad:$GST/gst-ffmpeg:$GST/gnonlin:$GST/gst-monkeysaudio:$GST/plugins:$GST_PLUGIN_PATH exportGST_PLUGIN_SYSTEM_PATH= exportGST_REGISTRY=$GST/gstreamer/registry.xml export MANPATH=$GST/gstreamer/tools:$GST/prefix/share/man:$MANPATH pythonver=`python -c "import sys; print sys.version[:3]"` export PYTHONPATH=$GST/gst-python:$GST/prefix/lib/python$pythonver/site-packages${PYTHONPATH:+:$PYTHONPATH} # if we got a command, run it, else start a shell if test ! -z "$1"; then $@ exit $? fi #set up prompt to help us remember we're in a subshell, cd to # the gstreamer base dir and start $SHELL cd $GST shell=$SHELL if test"x$SHELL" == "x/bin/bash" then # debian/ubuntu resets our PS1. bastards. shell="$SHELL --noprofile" fi PS1="[gst-$VERSION] $PS1"$shell 如果你将上面的脚本放在你的目录下,并且链接(symlink)到gst-cvs (如果你想通过cvs最新版本(HEAD)开发) 或者链接(symlink )到 gst-0.8 (如果你想通过0.8 版本来开发),它将会自动的选择当前目录下末安装的版本。