基于GStreamer 的一些软件

合集下载

gstreamer相关命令

gstreamer相关命令

用gstreamer架构做对媒体开发时,gst-inspect 和gst-launch是两个非常使用的小工具,前者是用于查询库中已经包含的所有element以及他们的详细信息,后者用于快速构建一条pipeline,这个命令最爽,因为只要一句话,你就可以感受到播放的快感。

废话不多说,直接看示例:1 gst-inspect用法:首先进入命令行下,然后键入:gst-inspect,所有element都显示;gst-inspect >d:/c.txt 将所有element都导出到d盘根目录下的c。

txt 文件中,这个命令在你想要查找某个element但有不确定其全名时很有用gst-inspect ffmpeg >d/c.txt 同上,只是导出的element范围缩小到ffmpeg范围内gst-inspect ffdec_h264 . 显示ffdec-h264的详细信息,你可以输入想要查询的任何element,只要已经存在,就可以找到2 gst-launch 构建链路用法:最开始要构建链路,当然用playbin、playbin2,decodebin,decodebin2,uridecodebin这类上层的element是最简单省事的了。

比如,你想播放一个flv文件,位于d:/test_videos/1.flv,首先进入命令行下,然后键入:gst-launch filesrclocation=d:/test_videos/1.flv !decodebin !autovideosink 利用了filesrc decodebin 和autovideosink 3个element,其中设置了filesrc的location属性值为文件路径gst-launch filesrc location=d:/test_videos/1.flv !decodebin2 !autovideosink 同上,只是decodebin用较新的decodebin2代替了gst-launch uridecodebin uri=file:///d:/test_videos/1.flv !autovideosink 用uridecodebin 和autovideosink 2个element,其中uridecodebin的属性uri设置了gst-launch playbin uri=file:///d:test_video/1.flv 利用playbin一个element,设置了其属性uri 为file:///加文件路径gst-launch playbin2 uri=file:///d:test_video/1.flv 同上,只是用较新的playbin2代替了playbin如果想要自己用基本element而不用上层bin element 进行链路构建,那需要以下步骤。

gst-play 用法 -回复

gst-play 用法 -回复

gst-play 用法-回复GSTPlay是一个基于GStreamer的开源多媒体播放器,它提供了一种简单而强大的方式来播放各种媒体文件。

在这篇文章中,我们将一步一步地回答有关GSTPlay用法的问题,并介绍如何使用它来播放媒体文件。

第一步:安装GStreamer和GSTPlay首先,我们需要安装GStreamer和GSTPlay。

GStreamer是一个功能强大且灵活的多媒体框架,它提供了可以在不同平台上进行音频和视频处理的库和插件。

GSTPlay是GStreamer中的一个组件,它是一个基于命令行的播放器,可以使用简单的命令来控制播放和暂停。

在大多数Linux发行版中,你可以通过包管理器来安装GStreamer。

例如,对于Ubuntu用户,可以使用以下命令来安装GStreamer:bashsudo apt-get install gstreamer1.0-tools在GStreamer安装完成后,你还需要安装GSTPlay。

GSTPlay是GStreamer的一个插件,提供了一个名为`gstplay`的命令行工具。

你可以通过以下命令来安装GSTPlay:bashsudo apt-get install gst-plugins-base1.0-tools第二步:播放媒体文件一旦你已经安装了GStreamer和GSTPlay,就可以开始使用GSTPlay来播放媒体文件了。

GSTPlay支持多种媒体文件格式,包括音频和视频。

要播放一个媒体文件,可以使用以下命令:bashgst-play-1.0 [媒体文件路径]例如,要播放名为`example.mp4`的视频文件,可以运行以下命令:bashgst-play-1.0 example.mp4GSTPlay将打开一个新的窗口,并开始播放你指定的媒体文件。

你可以使用键盘上的一些按键来控制播放,例如空格键可以暂停/播放媒体文件,左箭头键可以后退5秒,右箭头键可以快进5秒。

视频解码方案

视频解码方案

视频解码方案引言随着科技的不断发展和进步,视频在我们的生活中扮演着越来越重要的角色。

然而,我们经常会遇到视频无法播放或者播放卡顿的问题。

这是因为视频数据压缩的复杂性和解码的要求提高所致。

为了解决这个问题,各种视频解码方案应运而生。

本文将介绍几种常见的视频解码方案。

1. 软件解码方案1.1 FFmpegFFmpeg是一个开源的跨平台多媒体解决方案,它可以完成多种视频解码操作。

它具有高效、灵活的特点,支持的视频格式非常广泛。

FFmpeg可以通过命令行或API来进行调用,使用起来非常方便。

但是,软件解码方案需要占用较大的CPU资源,对性能要求较高。

1.2 GStreamerGStreamer是一个基于开源的多媒体框架,它提供了一套完整的视频处理工具和解码库。

GStreamer支持各种流行的视频格式,可以在多个平台上运行。

它的可扩展性和灵活性使得在开发过程中可以自定义解码方案。

但是,GStreamer的学习曲线较陡峭,需要一定的技术基础。

2.1 GPU解码使用GPU进行视频解码可以充分利用其并行处理能力,提高解码速度和效率。

GPU解码方案适用于编码格式较复杂、码率较高的视频。

常见的GPU解码库有NVIDIA的Video Codec SDK和AMD的VCE API。

然而,GPU解码需要有具备相应硬件支持的设备,对于一些低端设备来说可能不适用。

2.2 ASIC解码ASIC(Application-Specific Integrated Circuit)是一种专用集成电路,可以定制实现特定的功能。

ASIC解码方案采用专门的硬件芯片来进行视频解码,可以实现高效的解码性能和低功耗消耗。

常见的ASIC解码芯片供应商有Broadcom和Realtek等。

然而,ASIC解码方案的定制性较强,适用范围相对有限。

2.3 FPGA解码FPGA(Field-Programmable Gate Array)是可编程逻辑门阵列,它可以按照需求重新配置其硬件结构。

基于GStreamer的音视频播放器的设计

基于GStreamer的音视频播放器的设计

基于GStreamer的音视频播放器的设计左登超;左登峰;刘永康【摘要】At present, Windows system was used to design the player for most of the railway passenger cars. But the Windows system is vulnerable to viruses and can easily cause a crash when a passenger car is often powered off and reset. In order to solve these problems, this article proposed the construction of the player using GStreamer framework based on the Linux system, gave the system running effect diagram. The verification results showed that the audio and video player got clear and stable playback effect with short development cycle and strong practicability under the GStreamer framework.%目前,铁路客车大多使用Windows系统进行播放器的设计.Windows系统容易感染病毒,并且在铁路客车经常断电复位的情况下,很容易造成系统崩溃.为了解决上述问题,文章提出了在Linux 系统下,使用GStreamer框架进行播放器的构建并给出系统运行效果图.经装车验证,在GStreamer框架下构建的音视频播放器的播放效果清晰、稳定,开发周期短,实用性较强.【期刊名称】《铁路计算机应用》【年(卷),期】2017(026)011【总页数】5页(P41-44,53)【关键词】Linux;GStreamer;QT;音视频播放器【作者】左登超;左登峰;刘永康【作者单位】中车青岛四方车辆研究所有限公司,青岛 266031;内蒙古银行总行科技信息部,呼和浩特 010010;中车青岛四方车辆研究所有限公司,青岛 266031【正文语种】中文【中图分类】U285;TP39目前,铁路客车上大多使用Windows系统进行播放器的设计。

使用Gstreamer作为数据源输出视频数据III填充数据

使用Gstreamer作为数据源输出视频数据III填充数据

使用Gstreamer作为数据源输出视频数据III填充数据GStreamer是一个功能强大的开源框架,用于构建流媒体应用程序。

它提供了一种简单灵活的方式来处理音频和视频数据流。

使用GStreamer 作为数据源输出视频数据可以帮助我们更好地理解如何使用这个框架来构建流媒体应用程序。

在下面的内容中,我将详细介绍如何使用GStreamer 来填充视频数据。

首先,我们需要安装GStreamer框架和相关的插件。

可以通过以下命令在Linux系统上安装GStreamer:```sudo apt-get install gstreamer1.0-tools gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly```安装完成后,可以通过运行以下命令检查是否成功安装:```gst-inspect-1.0```现在,我们可以开始使用GStreamer来填充视频数据了。

下面是一个示例代码:```pythonimport gigi.require_version('Gst', '1.0')from gi.repository import GObject, GstGObject.threads_initGst.init(None)pipeline = Gst.parse_launch"videotestsrc pattern=ball ! videoconvert ! autovideosink"pipeline.set_state(Gst.State.PLAYING)while True:#在此处填充视频数据pass```在上面的示例中,我们创建了一个视频测试源(videotestsrc),以球形图案填充视频数据。

gstreamer源码编译安装

gstreamer源码编译安装

gstreamer源码编译安装1.⾸先搭建 Gstreamer 所需环境 (1).先安装Gstreamer所需的程序包:1 sudo apt-get update2 sudo apt-get install -y bison flex libffi-dev libmount-dev libpcre3 libpcre3-dev zlib1g-dev libssl-dev gtk-doc-tools(2).安装 ORC ⽀持库,编译 gst-plugins-base 将会依赖这个库下载安装包地址:运⾏以下命令进⾏解压缩和编译安装:1 $tar xvJf orc-0.4.27.tar.xz2 $cd orc-0.4.273 $./autogen.sh --prefix=/usr/lib4 $make -j65 $sudo make install(3).安装 GLIB ⽀持库下载安装包地址:运⾏以下命令进⾏解压缩和编译安装:1 $tar xvJf glib-2.52.3.tar.xz2 $cd glib-2.52.33 $./autogen.sh4 $make -j65 $sudo make install2.安装 Gstreamer 1.12.2 基础软件包(适⽤于其他版本)(1).下载以下⼏个软件源码包:(地址:)1 gstreamer-1.12.22 gst-plugins-base-1.12.23 gst-plugins-good-1.12.24 gst-plugins-bad-1.12.25 gst-plugins-ugly-1.12.26 gst-rtsp-server-1.12.2(2).编译安装gstreamer-1.12.21 $tar xvJf gstreamer-1.12.2.tar.xz2 $cd gstreamer-1.12.23 $ ./configure4 $make -j65 $sudo make install(3).编译安装gst-plugins-base-1.12.21 $tar xvJf gst-plugins-base-1.12.2.tar.xz2 $cd gst-plugins-base-1.12.23 $ ./configure4 $make -j65 $sudo make install备注:安装1.14.4版本遇到的问题和解决⽅案1 修改 gst-plugins-base/tests/icles/Makefile 中2 GST_LIBS = -L/usr/local/lib -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 $(GCOV_LIBS) INCORRECT 为:3 GST_LIBS = -L/usr/local/lib -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 -lgstbase-1.0 $(GCOV_LIBS) CORRECT(4).编译安装gst-plugins-good-1.12.21 $tar xvJf gst-plugins-good-1.12.2.tar.xz2 $cd gst-plugins-good-1.12.23 $ ./configure4 $make -j65 $sudo make install(5).编译安装gst-plugins-bad-1.12.21 $tar xvJf gst-plugins-bad-1.12.2.tar.xz2 $cd gst-plugins-bad-1.12.23 $ ./configure4 $make -j65 $sudo make install(6).编译安装gst-plugins-ugly-1.12.21 $sudo apt-get install libx264-dev //⽀持x264软编码插件2 $tar xvJf gst-plugins-ugly-1.12.2.tar.xz3 $cd gst-plugins-ugly-1.12.24 $ ./configure5 $make -j66 $sudo make install (7).配置Gstreamer环境1 $cd ~2 $sudo vim .bashrc(在⽂件最后新增以下内容保存退出)3 export LD_LIBRARY_PATH=/usr/local/lib4 export GST_PLUGIN_PATH=/usr/local/lib:/usr/lib/aarch64-linux-gnu/gstreamer-1.0 //此处需要根据实际的环境,不⼀定为aarch64-linux-gnu5 $source .bashrc(8).编译安装gst-rtsp-server-1.12.2(如果需要进⾏流媒体推流才进⾏安装)1 $tar xvJf gst-rtsp-server-1.12.2.tar.xz2 $cd gst-rtsp-server-1.12.23 $ ./configure4 $make -j65 $sudo make install测试指令:软编码加推流gst-launch-1.0 videotestsrc! videoconvert ! 'video/x-raw,width=320,height=240,framerate=(fraction)15' ! autovideoconvert ! x264enc ! rtph264pay ! udpsink host=192.168.1.94 port=。

基于Gstreamer的视频采集编码与传输系统的设计

基于Gstreamer的视频采集编码与传输系统的设计

第29卷第2期 2021年4月Vol.29 No.2Apr. 2021电脑与信息技术Computer and Information Technology文章编号:1005-1228(2021)02-0034-06基于Gstreamer 的视频采集编码与传输系统的设计张 雷,崔雪峰(沈阳航空航天大学 电子信息工程学院,辽宁 沈阳 110136)摘 要:为了降低视频传输过程中的延时。

系统从HD-SDI 摄像头采集格式为YUYV 的原始视频数据,一路经过NVIDIA 嵌入式平台Jetson TX2上HEVC 硬件编码、RTP 传输。

另一路作为预留接口,让Gstreamer 与其他应用程序进行交互。

在PC 端使用相同的视频数据进行软件编码。

结果表明,当压缩比一样的情况下,此系统中的HEVC 硬件编码器比软件编码器的编码速率快2个数量级,PSNR 高6dB。

从客户端接收显示的画面可以看到,系统实现了实时传输并且在4K 分辨率的时候依然可以正常进行实时观看。

关键词:Gstreamer;Jetson TX2;超高清视频编码;实时传输协议中图分类号:TN919.8,TP393 文献标识码:ADesign of Video Capture Coding and Transmission System Based on GstreamerZHANG Lei,CUI Xue-feng(Shenyang Aerospace University,School of Electronic Information Engineering, Shenyang 110136, China)Abstract:To reduce the delay in video transmission.The system collects the original video data in the format of YUYV from the HD-SDI camera, and all the way through HEVC hardware coding and RTP transmission on NVIDIA embedded platform Jetson TX2. The other is a reserved interface that lets Gstreamer interact with other applications. The same video data is used for software coding on PC. The results show that when the compression ratio is the same, the coding rate of the hardware encoder in this system is two orders of magnitude faster than that of the software encoder, and the PSNR is 6dB higher.As can be seen from the screen received from the client, the system realizes real-time transmission and can still watch in real time at 4K resolution.Key words: Gstreamer; Jetson TX2; HEVC encoder; RTP收稿日期:2020-09-04作者简介:张雷(1972-),男,副教授,博士,主要研究方向:图像压缩技术;(通讯作者)崔雪峰(1995-),男,硕士研究生,主要研究方向:图像处理。

gstreamer使用进阶

gstreamer使用进阶

gstreamer使用进阶gstreamer很牛逼,让多媒体应用程序的开发变的更加简单,但是,也正是由于gstreamer对很多细节的隐藏,使得我们很容易把多媒体编程想得过于简单。

关于gst-launch的使用,这里不做教学,初次接触者可以自行google。

然后,请准备一个摄像头,下面我举的例子,都会用到。

先罗列出一堆例子--gst-launch-0.10 v4l2src ! ximagesinkgst-launch-0.10 v4l2src ! xvimagesinkgst-launch-0.10 v4l2src ! ffmpegcolorspace ! ximagesinkgst-launch-0.10 v4l2src ! ffmpegcolorspace ! xvimagesinkgst-launch-0.10 v4l2src ! 'video/x-raw-rgb' ! ximagesinkgst-launch-0.10 v4l2src ! 'video/x-raw-yuv' ! ximagesinkgst-launch-0.10 v4l2src ! 'video/x-raw-rgb' ! xvimagesinkgst-launch-0.10 v4l2src ! 'video/x-raw-yuv' ! xvimagesinkgst-launch-0.10 v4l2src ! 'video/x-raw-yuv' ! ffmpegcolorspace ! ximagesinkgst-launch-0.10 v4l2src ! 'video/x-raw-yuv' ! ffmpegcolorspace ! xvimagesinkgst-launch-0.10 v4l2src ! 'video/x-raw-yuv,format=(fourcc)YV12' ! xvimagesinkgst-launch-0.10 v4l2src ! 'video/x-raw-yuv,format=(fourcc)YUY2' ! xvimagesinkgst-launch-0.10 v4l2src ! 'video/x-raw-yuv,format=(fourcc)YV12' ! ffmpegcolorspace ! xvimagesink gst-launch-0.10 v4l2src ! 'video/x-raw-yuv,format=(fourcc)YUY2' ! ffmpegcolorspace ! xvimagesink然后我提出一个问题---上面这些例子,哪些可以正确执行,哪些不可以?不可以的原因是什么?如果你能够回答我提出的问题,那说明你对视频这一部分已经很清楚了。

GStreamer编写一个简单的MP3播放器

GStreamer编写一个简单的MP3播放器

本文介绍如何使用GStreamer编写一个简单的MP3播放器。

1,需要使用mad解码插件,因此需要先安装gstreamer0.10-plugins-ugly2,编写mp3播放器下面来看看如何利用GStreamer框架提供的组件,来实现一个简单的MP3播放器。

数据源元件负责从磁盘上读取数据,过滤器元件负责对数据进行解码,而接受器元件则负责将解码后的数据写入声卡。

如果想要在程序中应用GStreamer提供的各种功能,首先必须在主函数中调用gst_init ()来完成相应的初始化工作,以便将用户从命令行输入的参数传递给GStreamer函数库。

一个典型的GStreamer应用程序的初始化如下所示:#include<gst/gst.h>int main(int argc,char*argv[]){gst_init(&argc,&argv);/**/}接下去需要创建三个元件并连接成管道,由于所有GStreamer元件都具有相同的基类GstElement,因此能够采用如下方式进行定义:GstElement*pipeline,*filesrc,*decoder,*audiosink;管道在GStreamer框架中是用来容纳和管理元件的,下面的代码将创建一条名为pipeline的新管道:/*创建用来容纳元件的新管道*/pipeline=gst_pipeline_new("pipeline");数据源元件负责从磁盘文件中读取数据,它具有名为location的属性,用来指明文件在磁盘上的位置。

使用标准的GObject属性机制可以为元件设置相应的属性:/*创建数据源元件*/filesrc=gst_element_factory_make("filesrc","disk_source");g_object_set(G_OBJECT(filesrc),"location",argv[1],NULL);过滤器元件负责完成对MP3格式的数据进行解码,最简单的办法是安装mad这一插件,借助它来完成相应的解码工作:/*创建过滤器元件*/decoder=gst_element_factory_make("mad","decoder");接收器元件负责将解码后的数据利用声卡播放出来:/*创建接收器元件*/audiosink=gst_element_factory_make("audiosink","play_audio")已经创建好的三个元件需要全部添加到管道中,并按顺序连接起来:/*添加元件到管道中*/gst_bin_add_many(GST_BIN(pipeline),filesrc,decoder,audiosink,NULL);/*通过衬垫连接元件*/gst_element_link_many(filesrc,decoder,audiosink,NULL);所有准备工作都做好之后,就可以通过将管道的状态切换到PLAYING状态,来启动整个管道的数据处理流程:/*启动管道*/gst_element_set_state(pipeline,GST_STATE_PLAYING);这里加入一个消息处理函数bus_call来监视产生的消息/*终止管道*/gst_element_set_state(pipeline,GST_STATE_NULL);/*释放资源*/gst_object_unref(GST_OBJECT(pipeline));3,完整的源代码如下所示:#include<gst/gst.h>#include<glib.h>//定义消息处理函数,static gboolean bus_call(GstBus*bus,GstMessage*msg,gpointer data){GMainLoop*loop=(GMainLoop*)data;//这个是主循环的指针,在接受EOS消息时退出循环switch(GST_MESSAGE_TYPE(msg)){case GST_MESSAGE_EOS:g_print("End of stream\n");g_main_loop_quit(loop);break;case GST_MESSAGE_ERROR:{gchar*debug;GError*error;gst_message_parse_error(msg,&error,&debug);g_free(debug);g_printerr("ERROR:%s\n",error->message);g_error_free(error);g_main_loop_quit(loop);break;}default:break;}return TRUE;}int main(int argc,char*argv[]){GMainLoop*loop;GstElement*pipeline,*source,*decoder,*sink;//定义组件GstBus*bus;gst_init(&argc,&argv);loop=g_main_loop_new(NULL,FALSE);//创建主循环,在执行g_main_loop_run后正式开始循环if(argc!=2){g_printerr("Usage:%s<mp3filename>\n",argv[0]);return-1;}//创建管道和组件pipeline=gst_pipeline_new("audio-player");source=gst_element_factory_make("filesrc","file-source");decoder=gst_element_factory_make("mad","mad-decoder");sink=gst_element_factory_make("autoaudiosink","audio-output");if(!pipeline||!source||!decoder||!sink){g_printerr("One element could not be created.Exiting.\n");return-1;}//设置source的location参数。

gstreamer网络传输协议相关插件介绍

gstreamer网络传输协议相关插件介绍

gstreamer网络传输协议相关插件介绍gstreamer 提供了教全面的网络协议相关插件,要在broncho中实现其对流媒体播放的支持,首先对其这些网络协议相关的插件进行了解,有些术语还不是太明白,先记录下来以备后用。

DCCP: 数据报拥塞控制协议(Datagram Congestion Control Protocol)是一种面向信息的传输协议:DCCP提供双向单播连接的拥塞控制不可靠数据报。

DCCP实施可靠的连接建立,拆卸,ECN,拥塞控制,和功能协商。

DCCP是适合传输大量数据的应用程序,其能从及时性和可靠性之间的权衡取舍中受益。

gstreamer 中其插件描述如下(gst-plugins-bad):dccpclientsink:Send data as a client over the network via DCCPdccpclientsrc:Receive data as a client over the network via DCCPdccpserversink:Send data as a server over the network via DCCPdccpserversrc:Receive data as a server over the network via DCCP示例:gst-launch -v dccpclientsrc host=localhost port=9011 ccid=2 ! decodebin ! alsasinkgst-launch -v filesrc location=music.mp3 ! mp3parse ! dccpserversink port=9011 ccid=2Send a MP3 stream to the client using DCCP. The client willdecode the MP3 and play it.RTSP: 实时流传输协议(Real Time Streaming Protocol).RTSP是用来控制声音或影像的多媒体串流协议,并允许同时多个串流需求控制,传输时所用的网络通讯协定并不在其定义的范围内,服务器端可以自行选择使用TCP或UDP 来传送串流内容,它的语法和运作跟HTTP 1.1类似,但并不特别强调时间同步,所以比较能容忍网络延迟。

基于GStreamer的远程视频监控系统的关键技术研究

基于GStreamer的远程视频监控系统的关键技术研究

器端组成 , 客户端向服务器端转发多媒体流 , 则服务器端接 收转
发而来 的多媒体流 。本 文就基 于 G t a e 流媒体 应用 框架 下 Sr m r e 的远程视频监控 系统开 发的关键 技术进行讨论 。
的数据交换 , 因此很容易利用 已有的各种 插件 “ 组装 ” 出一 个
所 以 , 方 案 采 取 的 是 基 于 G t a r 媒 体 应 用 开 发框 架 本 Sr me 流 e
DrcSo i thw是微软公 司开 发的能够让 软件 开发者 对媒体 文 e
0 引 言
网络摄像机 即 I a e , PC m r 是视 频监 控领域 的发 展趋 势 , a 也 是 当前 视 频 监 控 领 域 的热 点 。 用 户 访 问 网络 摄 像 机 时 只需 网 络 摄像机 的 I P地址 , 这样 , 在互联 网中就会遇 到一个严重 的问题 , 由于 目前互联 网还没 有过 度到 Iv 而 Iv P6, P4的地址 已经接 近枯 竭 , 可能再赋 予每一 台网络摄像 机一 个 I 不 P地址 , 因此在 网络 浏览器 中直接监视其影像还是有 困难 的。 虽然网络摄像机是发展 的趋势 , 但在现实生 活中 , 模拟摄像 机还是 占了很大一部分 份额 。从 互联 网的一端 访 问摄像 机时 , 直接访问也是不可行 的。 因此 , Itre 没有过渡到 Iv 在 nent P6之前 , 网络摄 像机还 没有 完 全 替 代 模 拟 摄 像 机 之 前 , 业 的 远 程 视 频 监 控 系 统 软 件 还 是 专 必须 的。由于前述 的问题 , 远程视 频监控 系统 由客户 端和服 务
” je x v d o/ -
iht g =45 2, fa n a e r r er t

基于Gstreamer框架的smooth streaming协议的插件开发(DOC)

基于Gstreamer框架的smooth streaming协议的插件开发(DOC)

基于GStreamer的Smooth Streaming插件开发目录第一章绪论 (1)1.1 课题研究的意义 (1)1.2 国内外研究现状与趋势 (2)1.3 课题研究的主要内容 (3)第二章相关背景知识 (4)2.1 GStreamer媒体框架概述 (4)2.1.1 GStreamer媒体框架基本概念 (4)2.1.2 GStreamer的工作原理 (4)2.1.3 GStreamer框架中的关键技术 (5)2.2 H.264视频编解码技术 (9)2.2.1 H.264视频编解码技术简介 (9)2.2.2 H.264的分层结构 (10)2.3 AAC音频编解码技术 (11)2.3.1 AAC音频编码基本概念 (11)2.3.2 AAC系统的框架 (12)2.3.3 AAC音频文件格式的种类 (12)2.4 流媒体服务器 (14)第三章流媒体传输协议 (15)3.1 RTP/RTCP传输协议 (15)3.1.1 RTP协议的基本概念 (16)3.1.2 RTP协议的数据报头格式 (17)3.1.3 RTCP协议 (18)3.1.4 RTCP数据包格式 (18)3.2 HLS传输协议 (19)3.2.1 HLS协议组网结构 (20)3.2.2 HLS协议实的直播编码器 (20)3.2.3 HLS分段生成策略及m3u8索引文件 (21)3.3 Smooth Streaming传输协议 (22)3.3.1 Smooth Streaming传输协议的概念 (22)3.3.2 Smooth Streaming协议的通信机制 (22)3.3.3 Smooth Streaming协议的数据结构 (25)第四章基于GStreamer的Smooth Streaming协议的插件开发 (27)4.1 socket通信协议设计实现 (27)4.1.1 socket的概念 (27)4.1.2 socket的分类 (27)4.1.3 socket的设计过程 (28)4.1.4 非阻塞socket的设计过程 (28)4.2 HTTP通信协议设计实现 (29)4.2.1 HTTP相关概念 (29)4.2.2 HTTP通信协议的特点 (29)4.2.3 HTTP的URL格式分析 (30)4.2.4 HTTP通信协议设计 (30)4.3 环形缓存设计 (32)4.3.1 环形缓存的基本结构 (33)4.3.2 环形缓存的工作原理 (33)4.3.3 环形缓存的设计过程 (34)4.4 Smooth Streaming通信协议设计实现 (35)4.4.1 Smooth Streaming通信协议设计流程 (35)4.4.2 Smooth Streaming通信协议设计过程 (36)4.5 基于GStreamer的Smooth Streaming协议的插件设计 (38)4.5.1 Smooth Streaming协议的source元件设计 (39)4.5.2 Smooth Streaming协议的sink元件设计 (41)4.5.3 Avplayer底层接口 (43)第五章测试结果 (44)5.1 测试实例设计 (44)5.2 实际设计问题点解决方法 (45)5.2.1 Avplayer初始化失败 (45)5.2.2 实现手动智能切换码率 (46)5.3 测试结果仿真图 (47)第六章总结 (50)参考文献 (51)第一章绪论1.1 课题研究的意义Internet在过去短短的十几年时间里经历了飞跃的发展,无论是在学习、工作还是生活中我们越来越多的利用互联网获取和传输信息。

基于GStreamer的一些软件

基于GStreamer的一些软件

基于GStreamer的一些软件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 流媒体客户端软件。

基于Gstreamer框架的ffmpeg流媒体编解码设计

基于Gstreamer框架的ffmpeg流媒体编解码设计

Software Development •软件开发Electronic Technology & Software Engineering 电子技术与软件工程• 43【关键词】ffmpeg gstreamer 编解码 流媒体把采集的yuv 格式通过ffmpeg 编解码库编码成h264格式,再通过网络传输到室内播放终端,在室内机终端设备再通过ffmpeg 解码器转换为yuv420p 格式,最终转换为RGB 格式,并在Linux 系统的ARM 平台上利用QT 图形化界面显示。

最终实现了数字可视对讲系统功能实现的整个流程。

基于Gstreamer 框架的ffmpeg 流媒体编解码设计文/王锋1 陆凯2Gstreamer 是一个基于管道Pipeline 的多媒体应用框架,采用C 语言编程,但是通过gObject ,将各插件封装成面向对象编程的工具。

元件 Element 是Gstreamer 最重要和基本的对象类,通过插件Plugin 的形式提供,多个元件Elements 可以组合为箱柜bin ,并进一步聚合形成一个管道Pipeline 完成一个多媒体应用处理。

目前是嵌入式Linux 最为常用的处理多媒体应用框架。

我们主要是在ffmpeg 多媒体编解码的过程中加入Gstreamer 的应用框架。

1 基于gstreamer的流媒体可视对讲系统开发过程Gstreamer 框架中使用gst-launch 命令进行流媒体播放,我们在开发过程中,主要使用gst-launch 在终端编译和运行一条pipeline 用于播放多媒体。

gst-launch-0.10 或gst-launch-1.0一般ubuntu 系统自带,相关插件包可通过wget 下载opky 安装。

由于是基于嵌入式ARM 芯片的流媒体开发,还需交叉编译相关gstreamer 动态库移植到下位机平台,如glib 库、gstreamer 插件库libgstqt5videosink.so 、qt5lib 库libQt5GLib-2.0.so 、libQt5GStreamer-1.0.so 等。

GStreamer应用程序开发手册

GStreamer应用程序开发手册

I. 介绍GStreamer 是一个非常强大而且通用的流媒体应用程序框架。

GStreamer所具备的很多优点来源于其框架的模块化: GStreamer能够无缝的合并新的插件。

但是, 由于追求模块化和高效率, 使得GStreamer在整个框架上变的复杂, 也同时因为复杂度的提高, 使得开发一个新的应用程序显得不是那么的简单。

这个指南试图帮助你了解GStreamer的框架(version 0.10.3.1)以方便你在GStreamer框架的基础上做开发。

第一章节将重点关注如何开发一个简单的音频播放器, 通过对整个过程的讲解,力图使你能够理解有关GStreamer的一些概念。

在之后的章节中,我们将讨论一些关于媒体播放(playback)控制的高级问题, 这些问题包括了录音、录象和编辑等等。

目录1. 序言1.1. GStreamer是什么?1.2. 谁需要读这个手册?1.3. 预备知识1.4. 本手册结构2. 动机与目标2.1. 当前问题2.1.1. 大量的代码复制2.1.2. “一个目标”媒体播放器/媒体库2.1.3. 没有统一的插件管理机制2.1.4. 拙劣的用户感2.1.5. 网络透明度的规定2.1.6. 与Windows™ 的产品还存在差距2.2. 设计目标2.2.1. 结构清晰且威力强大2.2.2. 面向对象的编程思想2.2.3. 灵活的可扩展性能2.2.4. 支持插件以二进制形式发布2.2.5. 高性能2.2.6. 核心库与插件(core/plugins)分离2.2.7. 为多媒体数字信号编解码实验提供一个框架3. 基础概念介绍3.1. 元件(Elements)3.2. 箱柜(Bins)和管道(pipelines)3.3. 衬垫(Pads)第1章. 序言本章将从技术的角度来描述本手册的总体结构。

1.1. GStreamer是什么?GStreamer是一个创建流媒体应用程序的框架。

其基本设计思想来自于俄勒冈(Oregon)研究生学院有关视频管道的创意, 同时也借鉴了DirectShow的设计思想。

gstreamer概述

gstreamer概述

gstreamer概述GStreamer是一个功能强大的开源多媒体框架,它提供了一套丰富的库和插件,用于在应用程序中处理多媒体数据。

GStreamer可以用于构建各种不同类型的应用程序,包括流媒体服务器、视频编辑器、音频播放器等等。

本文将介绍GStreamer的概述,并详细讨论其架构、工作原理以及一些常见的用法示例。

一、GStreamer的背景和概述GStreamer最初由Erik Walthinsen于1999年开发,它最初是为了解决Linux 平台下多媒体框架的不足而诞生的。

GStreamer的目标是提供一套统一的接口,使开发者可以方便地处理多媒体数据。

GStreamer的核心思想是流处理。

它将多媒体数据看作是一系列连续的数据流,开发者可以通过连接各种处理元件(Element)来构建数据流图(Pipeline),从而实现对多媒体数据的处理和转换。

GStreamer的整体架构非常灵活和可扩展。

它采用插件的方式实现各种功能,开发者可以根据自己的需要选择并加载适合的插件。

GStreamer提供了大量的核心插件,涵盖了多种多媒体编解码器、效果器、输入输出设备等,同时也支持第三方插件的开发和集成。

二、GStreamer的工作原理GStreamer的工作原理可以通俗地理解为一个“管道”:数据从一个地方(源)经过一系列的处理步骤(元件)最终输出到另一个地方(汇)。

下面将详细介绍GStreamer的工作原理。

1. 源(Source):源是GStreamer数据流图的起点,它产生多媒体数据并将其提供给下一个元件进行处理。

源可以是本地文件、网络流、摄像头等。

2. 元件(Element):元件是GStreamer中的基本处理单位,它可以执行各种操作,例如解码、转换、混音等。

每个元件都有输入和输出端口,通过这些端口可以连接多个元件,构建数据流图。

GStreamer提供了大量的元件,开发者也可以自己开发和集成新的元件。

gst-play 用法

gst-play 用法

gst-play 用法gst-play 是 GStreamer 中的一个重要组件,它用于播放音频和视频流。

GStreamer 是一个流媒体处理框架,可用于处理音频、视频和其他类型的媒体数据。

在本文档中,我们将介绍 gst-play 的基本用法、安装和配置、常用插件、使用示例以及常见问题。

一、基本用法gst-play 为用户提供了播放音频和视频流的功能。

要使用 gst-play,您需要先确保已正确安装 GStreamer 及其相关组件。

您可以通过以下步骤来安装和配置 gst-play:1. 安装 GStreamer:根据您的操作系统,下载并安装适用于您的GStreamer 版本。

2. 配置环境变量:将 GStreamer 的 bin 目录添加到您的 PATH 环境变量中,以便在命令行中可以访问 gst-play。

3. 测试 gst-play:在命令行中输入 `gst-play` 并按回车键,这将启动 gst-play 应用程序并显示一些菜单选项。

使用 gst-play 时,您可以使用菜单选项来选择要播放的媒体文件或流媒体地址。

例如,您可以使用 `m` 选项来选择媒体文件,使用`v` 选项来选择视频流,使用 `h` 选项来显示帮助菜单。

您还可以使用其他选项来控制播放器的音量、暂停和停止等操作。

二、安装和配置要安装和配置 gst-play,请按照以下步骤操作:1. 确保已安装 GStreamer:根据您的操作系统,下载并安装适用于您的 GStreamer 版本。

2. 安装相关插件:GStreamer 需要一些插件来支持不同的媒体格式和流媒体协议。

您需要安装适用于您的 GStreamer 版本的相关插件。

3. 设置环境变量:将 GStreamer 的 bin 目录添加到您的 PATH 环境变量中,以便在命令行中可以访问 gst-play 和其他相关的工具和库。

4. 测试 gst-play:在命令行中输入 `gst-play` 并按回车键,检查是否能够正常启动 gst-play 并显示菜单选项。

linux jetson c++ gstreamer编码

linux jetson c++ gstreamer编码

在Linux Jetson中使用C++和GStreamer编码是一种常见的方法。

GStreamer是一个功能强大的多媒体框架,可以用于创建和处理音频和视频流。

在Jetson上使用GStreamer可以进行实时图像和视频的编码和解码。

要在Jetson上使用GStreamer,首先需要安装GStreamer库和开发工具。

可以通过包管理器来安装它们,例如使用apt-get命令。

安装完成后,就可以在C++程序中使用GStreamer的API来编码图像和视频了。

GStreamer的编码功能通过插件来实现,可以根据需要选择合适的插件。

常用的插件包括x264、x265、VP8、VP9等。

这些插件可以实现不同的视频编码算法,可以根据具体需求选择适合的插件。

使用GStreamer进行编码的一般流程包括以下几个步骤:1. 创建GStreamer的管道(pipeline)对象,用于组织和连接各个元素(element)。

2. 创建适当的源(source)元素,用于获取要编码的原始图像或视频流。

3. 创建编码器(encoder)元素,并将其连接到源元素的输出端口上。

4. 创建目标(destination)元素,用于保存编码后的数据流或将其发送到网络等。

5. 启动管道,并开始编码过程。

以下是一个简单的示例代码,演示了如何使用GStreamer进行视频编码:```cpp#include <gst/gst.h>int main(int argc, char *argv[]) {gst_init(&argc, &argv);// 创建管道GstElement *pipeline = gst_pipeline_new("my-pipeline");// 创建源元素GstElement *source = gst_element_factory_make("videotestsrc", "source");// 创建编码器元素GstElement *encoder = gst_element_factory_make("x264enc", "encoder");// 创建目标元素GstElement *sink = gst_element_factory_make("filesink", "sink");g_object_set(sink, "location", "output.mp4", NULL);// 将元素添加到管道中gst_bin_add_many(GST_BIN(pipeline), source, encoder, sink, NULL);// 连接元素gst_element_link_many(source, encoder, sink, NULL);// 启动管道gst_element_set_state(pipeline, GST_STATE_PLAYING);// 等待编码过程完成GstBus *bus = gst_element_get_bus(pipeline);GstMessage *msg = gst_bus_poll(bus, GST_MESSAGE_ERROR | GST_MESSAGE_EOS, -1);gst_message_unref(msg);// 停止管道gst_element_set_state(pipeline, GST_STATE_NULL);// 释放资源gst_object_unref(GST_OBJECT(pipeline));return 0;}```这是一个基本的示例,可以根据需要进行修改和扩展。

Gstreamer 工具使用 (一)

Gstreamer 工具使用 (一)

Gstreamer 工具使用(一)拿mp3档案做例子,用一个比较普遍而且广泛应用的格式做练习有很多好处,一来没有影像,就先省去同步的问题,也不会有cpu / bandwidth 不够的问题(因为video的bitrate 比audio高出很多);二来测试档案满地爬,而且横跨多种不同参数的压缩格式,更好的是可以互相参照的播放器也是满地爬(一不小心就踩到的程度…搭捷运时年轻人几乎人手一台player),抓虫或对照功能时很好用。

gstreamer 提供了一个command line 建立pipeline的工具:gst-launch。

给不同的参数可以自动或手动的方式去播放一个多媒体档,这个工具说方便很方便,说不方便也的确有点麻烦。

方便是一个指令就可以叫它开始播档案,省去图型化介面的慢和滑老鼠的动作;不方便是因为它除了play 以外没有别的navigation command,不像mplayer 还有给hotkey快转(快转对於看谜片来说是很重要的呀!!)。

至於所谓的pipeline,长得就像这样箭头和方块组成的结构就称为pipeline,而每个方块(element) 都负责某一部份的资料处理,称为element。

这和DirectShow的graph 是相当神似的。

有DirectShow 基础的人应该会比我还快了解gstreamer 吧。

总之,自动建立pipeline的指令是如此:gst-launchplaybinuri=file:///path/to/file.mp3而手动建立的话可以这么简单:gst-launchfilesrc location=/path/to/file.mp3 ! mad ! alsasink其中的mad 就是gstreamer 会runtime去load 的element,也就是接下来会深入去讲的主题。

如果你的系统缺少了解码mp3 必要的函式库或gstreamer 针对mp3的插件,那就会播放失败。

基于OMAP和Gstreamer的网络视频监控系统

基于OMAP和Gstreamer的网络视频监控系统

基于OMAP和Gstreamer的网络视频监控系统陈乐;吴蒙【期刊名称】《计算机技术与发展》【年(卷),期】2016(26)9【摘要】随着人们生活水平的逐渐提高,人们对安全越来越重视,视频监控在很多领域逐渐普及。

在OMAP平台上运用Gstreamer多媒体框架,实现了一个集视频采集、视频编码和视频传输的C/S结构网络视频监控系统。

视频采集基于V4L2应用程序接口,视频编码采用H.264编码,网络传输承载于RTP协议族之上。

系统包含服务端和客户端,基于插件的系统结构使该系统具有易维护、易扩展的特点。

在OMAP平台上的测试结果表明,该系统整体延时在1 s以下,满足了实时监控需求,可应用于实际生产。

%With the gradual improvement of people’ s living standards,people have paid more attention to security,and video surveillance is gradually spread around many fields. In this paper,a network video surveillance system with C/S structure including video capture,en-coding and transmission is developed under OMAP platform based on Gstreamer multimedia framework. Video capture is based on V4L2 application program interface,video encoding is using H. 264 coding standard,and network transmission is based on the RTP family. This system i ncludes server and client,and it’ s easy to maintain and expand because of the plugin-based structure. Test results on the OMAP platform show that the overall system delay of about 1 seconds or less,canmeet the needs of real-time monitoring,which can be used in actual production.【总页数】5页(P95-98,103)【作者】陈乐;吴蒙【作者单位】南京邮电大学通信与信息工程学院,江苏南京 210003;南京邮电大学通信与信息工程学院,江苏南京 210003【正文语种】中文【中图分类】TP302【相关文献】1.基于Gstreamer的Android系统多媒体处理框架研究 [J], 涂晶晶;熊强;熊志刚2.基于GStreamer框架的视频编解码安全性优化研究 [J], 王锋;邢诒俊;陆凯3.基于Gstreamer框架的ffmpeg流媒体编解码设计 [J], 王锋;陆凯;4.基于Gstreamer的Android系统多媒体处理框架研究 [J], 涂晶晶;熊强;熊志刚;5.基于Gstreamer的视频采集编码与传输系统的设计 [J], 张雷;崔雪峰因版权原因,仅展示原文概要,查看原文内容请购买。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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 版本来开发),它将会自动的选择当前目录下末安装的版本。

相关文档
最新文档