免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3335 | 回复: 0
打印 上一主题 下一主题

gstream介绍 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-01-01 15:20 |只看该作者 |倒序浏览
本文来自   
http://www.gstreamer.cn/
    中文网站


1.GStreamer是什么?
  GStreamer是一个开源的多媒体框架库。利用它,可以构建一系列的媒体处理模块,包括从简单的ogg播放功能到复杂的音频(混音)和视频(非线性编辑)的处理。
应用程序可以透明的利用解码和过滤技术。开发者可以使用简洁通用的接口来编写一个简单的插件来添加新的解码器或滤镜。
2.基于GStreamer 的一些软件
所有软件按名称字母先后排列
acast
acast
是为个人声音设备和各种流服务器提供音频网络广播的软件,它有GTK+2 和 控制台界面。
amaroK
amaroK
是KDE的一个播放器。
avisynth 3.0
Avisynth 3.0
是一个强大的视频帧服务器软件(video frameserver)。
Banshee
Banshee
是一个基于Mono 的 GNOME 的一个音乐播放器。
BMPx
BMPx
是一个基于 GTK+ 的音乐播放器,它有类似'Winamp'的界面。
Buzztard
Buzztard
是一个类似Buzz和 FastTracker 的音乐软件。
Cupid
一个基于GStreamer的录像软件
, 当前正在开发中,它将能高效的同步记录音频、视频,保存在GStreamer 支持的任一格式。
关于 Dave/Dina 工程
Dave/Dina 工程
是一个关于播放和记录电视、多媒体等的机顶盒软件系统。
Elisa
Einterface.lisa
是一个基于OpenGL的跨平台的媒体中心解决方案。
Eina
Eina
是一个传统的音频播放软件,它有一个基于 GTK2 的界面。
Flumotion
Flumotion
是一个分布式流媒体服务器软件。
FUPlayer
FUPlayer
是用Python 语言写的GNOME媒体播放器。
Gamp
Gamp
是一个基于GNOME的媒体播放器。
Geekcast
Geekast
是一个用Ruby写的基于GNOME 的P2P 流媒体客户端软件。
GNOME Media
GNOME Media
用GStreamer 来进行声音控制、音频录制和CD播放。
GMediaRender
GMediaRender
作为upnp媒体服务器的客户端。
Goobox
Goobox
是一个基于GNOME 的cd 播放软件和 剪辑(ripper)软件。
GStreamer Editor
GStreamer Editor
是拥有图形界面的管道构建编辑器。
Istanbul
Istanbul
是一个屏幕记录器。
Jamboree
Jamboree
是Imendio开发的基于GNOME的音乐播放器。
Jokosher
Jokosher
是一个多媒体音乐编辑器。
JuK
JuK
是KDE桌面的一个音乐自动点唱器。
Kaffeine
Kaffeine
是基于 KDE 的一个播放器。
Lindele
Lindele
是一个基于GNOME 的音乐播放器。
Listen
Listen
是用 Python写的一个GNOME下的音乐播放器。
LiveSupport
LiveSupport
是一个无线电管理软件,它提供了具有混响装置的室内广播和远程广播的综合自动系统。
Marlin
marlin
是GNOME下的一个样本编辑器。
Monkey Bubble
Monkey Bubble
是一个很有趣又很酷的GNOME下的一个游戏软件,它通过GStreamer播放音乐产生惊悚的或甜美的音响效果。
Muine
Muine
是 GNOME 下使用 Mono 框架的一个音乐播放器。
Navys
Navsys
是一个具有 GPS 地图和音乐播放功能的软件。它的音乐播放器是基于 GStreamer。
Pakt
Pakt
是对GObjects的 XML 抽像,通过它来监听和改变元件(element)状态和管道(pipeline)架构。
Permovi
Permovi
是一个基于Linux 的 HTPC (Home Theatre PC)软件。它将PC信号转换到独立的 CD-player/tuner/DVD-player/PVR 设备。Permovi使用的是Mono的框架。
Pitivi
Pitivi
是一个非线性视频编辑器,它通过 GStreamer 的强大功能和 Gnonlin 的非线性视频编辑库。
Player
Player
是一个简单易用的播放哭,它的内部功能特征都是可见的。
Rhythmbox
Rhythmbox
是一个综合的音乐管理软件,它的灵感来源于苹果的 iTunes。
Serpentine
Serpentine
是GNOME下的音频 cd 刻录软件。
Siren
Siren
用perl写的一个 GTK2 下的轻量级音乐播放软件。
Sound Converter
Sound Converter
GNOME下的一个小型语音转换软件。
Sound Juicer
Sound Juicer
是GNOME下一个简洁,实用的 CD ripper。
SoundScrape
SoundScrape
是一个基于 GUILE scriptability 的音频合成组件。
Togra
Togra
是一个 3D 多媒体框架。
Quod Libet
Quod Libet
是用 Python 写的GNOME下的一个音乐管理软件。
Thoggen
Thoggen
是一个高效的 DVD 备份软件,它基于GStreamer,拥有一个漂亮的 GTK+ 界面,功能强大且容易使用。
Totem
Totem
是 GNOME桌面系统的一个电影播放器。
Towel
Towel
是一个基于GTKMM 的音乐播放器。
Video-Whale
Video-Whale
是基于Gstreamer的video-wall的一个实现。用GStreamer构建video wall很容易,这篇文章通过图片向你介绍了怎么去做。
WaveMixer
WaveMixer
是基于 gtkmm 和 GStreamer的多声道语音编软件。
Wechselspieler
Wechselspieler
是一个艺术工具,用来将视频动作映射MIDI事件。
GStreamer 软件实验田
Aldegonde
Aldegonde
是一个简单的媒体播放器,它使得调试GStreamer的重放功能更加容易。
Kiss
Kiss
是基于KDE的一个简单的媒体播放器,对于想使用GStreamer的KDE开发者来说,它是一个很好的例子。
gst-sci
gst-sci
搜集了一些GStreamer的模式化插件(scientific plugins)。
3. 利用GStreamer开发应用程序
http://blog.csdn.net/gstreamer/archive/2006/09/04/1175220.aspx
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 which dirs are installed
GST=$MYGST/$VERSION
if test ! -e $GST; then
  echo "$GST does not exist !"
  exit
fi
# set up a 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 dynamic linker look in . too, so avoid this
LD_LIBRARY_PATH=$GST/prefix/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
for path in audio cdda interfaces netbuffer riff rtp tag video
do
  LD_LIBRARY_PATH=$GST/gst-plugins-base/gst-libs/gst/$path/.libs:$LD_LIBRARY_PATH
done
for path in base net check controller dataprotocol
do
  LD_LIBRARY_PATH=$GST/gstreamer/libs/gst/$path/.libs:$LD_LIBRARY_PATH
done
LD_LIBRARY_PATH=$GST/gstreamer/gst/.libs:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
  
export PKG_CONFIG_PATH=$GST/prefix/lib/pkgconfig:$GST/gstreamer/pkgconfig:$GST/gst-plugins/pkgconfig:$GST/gst-plugins-base/pkgconfig:$GST/gst-plugins-good/pkgconfig:$GST/gst-python/pkgconfig:$PKG_CONFIG_PATH
export 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
export GST_PLUGIN_SYSTEM_PATH=
export GST_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 版本来开发),它将会自动的选择当前目录下末安装的版本。
当然,这要求你已经下载了相应的gstreamer 和 gst-plugins 在 ~/gst/cvs(对于CVS最新版本(HEAD version))目录。如果不是这种情况,只要做相应的简单修改。
通过运行上面的脚本,你将会建立一个使用末安装工具的开发环境,并且它的gst-register注册中心默认下是使用末安装的插件的。同时,pkg-config 也优先识别末安装的拷贝(uninstalled copies)。
Q: 怎么利用 GConf 来得到系统级默认调用(system-wide defaults) ?
A: 对于 GNOME 下的软件来说,通过 GConf 来得到系统音视频的默认输出是很好的想法。你可以通过'gconfaudiosink' 和 'gconfvideosink' 元件(elements)来分别得到音频和视频的输出。它们会为你处理所有和 GConf相关的事务,并会自动的选择调用用户自定义的输出。
Q: 怎么调试 libtool 产生的奇怪 shell 脚本(funny shell scripts )?
A: 当你使用libtool 在末安装GStreamer (uninstalled GStreamer) 链接一个程序时,奇怪的shell脚本(funny shell scripts)是用来修改你的共享对象搜索路径,并启动程序。例如,想要调试gst-launch,则: libtool --mode=execute gdb /path/to/gst-launch
. 如果,以上不能正常运行,那么你的libtool可能有问题。
Q: 在GStreamer开发(gstreamer-devel)中为什么邮件交流这么慢(少) ?
A: 我们主要通过在线聊天系统来进行工作协调,而不是 email。可以通过
#gstreamer on irc.freenode.net
来加入我们的讨论。当然,对于大篇幅的提问或想得到更多人的回馈,一封 email 永远不会是坏主意。
Q: GStreamer 采用什么类型的版本标签(version scheme)呢 ?
A: 对于公开发布的版本,GStreamer采用标准的 主版本号.次版本号.微版本号(MAJOR.MINOR.MICRO) 的版本标签(version scheme)方式。如果发布的版本中有大量bug修正或其它增加的改变,那么,微版本号(MICRO)将增加。如果发布的版本中有大量改变,那么次版本号(MINOR)将增加。如果有非常独特的改进,主版本号(MAJOR)将增加。但你没必要为那屏住呼吸。
在开发周期中,GStreamer 也使用了第四级版本标记(或者说是NANO number)。如果这个数是 1,那么说明这是一个CVS版本。所有的 tarball 或 包有一个为 1 的nano number话,都是从CVS发布,它将不会被维护支持。另外,如果你下载的这个包或tarball不是从GStreamer团队得到的,不要对它有太高的期望。
如果这个数是 2 或者更大,那么这是一个官方重新发布的完整版本。如果你帮助开测试这些包和tarball,我们将非常欢迎,感谢。
Q: GStreamer内核 采用什么样的代码风格(coding style) ?
A: GStreamer内核是在 K&R 下用两格缩进(2-space indenting) 编码的。你只需和原代码的风格保持一致就可以了。虽然内核可以使用一个代码整理器来规整。
对于想被加入到 gst-plugins 模块中的个人插件,应当保持(follow)一样的代码风格。如果所有的一切都保持统一,那么将很简单容易。当然,Consistency 也是一个目标。
如果你使用 emacs, 请尝试下面: (defun gstreamer-c-mode ()
  "C mode with adjusted defaults for use with GStreamer."
  (interactive)
  (c-mode)
  (c-set-style "K&R")
  (setq c-basic-offset 2))
(setq auto-mode-alist (cons '("gst.*/.*\\.[ch]$" . gstreamer-c-mode)
                       auto-mode-alist))
Or, run your code through indent -br -bad -cbi0 -cli2 -bls -l100 -ut -ce
before submitting a patch(FIXME: check if these are indeed the proper options).
对于代码本身,
GNOME 编码指南(GNOME coding guidelines)
值得一读。只要可以,我们都将按照Gobject的精神来编写代码,并且使用大家熟悉的命名。
Patches 应当以统一内容的格式('unified context' format,使用diff -u -p),在 CVS 或最近的发布版本上进行。并且通过
bugzilla
将其附在 bug 报告中,而不仅仅是发送到邮件列表中。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/33226/showart_454310.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP