基于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 流媒体客户端软件。
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 版本来开发),它将会自动的选择当前目录下末安装的版本。
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 用法-回复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的音视频播放器的设计左登超;左登峰;刘永康【摘要】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是一个功能强大的开源框架,用于构建流媒体应用程序。
它提供了一种简单灵活的方式来处理音频和视频数据流。
使用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源码编译安装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的视频采集编码与传输系统的设计
第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对很多细节的隐藏,使得我们很容易把多媒体编程想得过于简单。
关于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播放器。
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 提供了教全面的网络协议相关插件,要在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类似,但并不特别强调时间同步,所以比较能容忍网络延迟。
