gstreamer 怎么看redis pipelinee结构

>> GStreamer管道图形性能现场可视化工具
GStreamer管道图形性能现场可视化工具
所属分类:
下载地址:
gst-viewperf.png文件大小:76.54 kB
分享有礼! 》
请点击右侧的分享按钮,把本代码分享到各社交媒体。
通过您的分享链接访问Codeforge,每来2个新的IP,您将获得0.1 积分的奖励。
通过您的分享链接,每成功注册一个用户,该用户在Codeforge上所获得的每1个积分,您都将获得0.2 积分的分成奖励。
This tool aims at grabbing and displaying performance indicators of a gstreamer pipeline to ease bottleneck debugging.
How it works
It displays performance indicators such as:
* queue filling states
* videorate statistics
* plugin-relative time reference (using progressreport)
How to use it
Just place queues after elements you wish to track the status of, and the colors and statistics will help you understand what is happening. Example reasons of bad performance are:
* stuck pipeline: an element is blocking the chain (which is often the case with display sinks without queues)
* cpu is saturated (often encoding elements)
In any case, it is advised to use queue and videorate right after your source.
Screenshot
How to install
Dependancies:
* gstreamer python bindings
Sponsored links
源码文件列表
温馨提示: 点击源码文件名可预览文件内容哦 ^_^
(提交有效评论获得积分)
评论内容不能少于15个字,不要超出160个字。
评价成功,多谢!
下载gst-viewperf.png
CodeForge积分(原CF币)全新升级,功能更强大,使用更便捷,不仅可以用来下载海量源代码马上还可兑换精美小礼品了
您的积分不足,优惠套餐快速获取 30 积分
10积分 / ¥100
30积分 / ¥200原价 ¥300 元
100积分 / ¥500原价 ¥1000 元
订单支付完成后,积分将自动加入到您的账号。以下是优惠期的人民币价格,优惠期过后将恢复美元价格。
支付宝支付宝付款
微信钱包微信付款
更多付款方式:、
您本次下载所消耗的积分将转交上传作者。
同一源码,30天内重复下载,只扣除一次积分。
鲁ICP备号-3 runtime:Elapsed:59.472ms - init:0.1;find:0.7;t:0.5;tags:0.2;related:28.2;comment:0.2; 5.8
登录 CodeForge
还没有CodeForge账号?
Switch to the English version?
^_^"呃 ...
Sorry!这位大神很神秘,未开通博客呢,请浏览一下其他的吧GStreamer基础教程11——调试工具 - 推酷
GStreamer基础教程11——调试工具
& & & 有时我们的应用并没有按照我们的预期来工作,并且在总线上获得的错误信息也没有足够的内容。这时我们该怎么办呢?幸运的时,GStreamer自身提供了大量的调试信息,通常这些信息会给出一些线索,指向出错的地方。本教程主要讲述:
& & & 如何在GStreamer里面获得更多地调试信息
& & & 如何把你自己的调试信息加入GStreamer的调试记录
& & & 如何获得图形化的pipeline
打印调试信息
& & & GStreamer和插件里面都有大量的调试信息,也就是说,在调试区域内可以给出所有的信息,包括时间戳,线程,种类,源文件名,函数名等等等等
& & & 调试输出的控制实在一个GST_DEBUG的环境变量控制的,这里给出一个例子,GST_DEBUG=2:
09F62420 WARN
filesrc gstfilesrc.c:1044:gst_file_src_start:&filesrc0& error: No such file &non-existing-file.webm&
& & & 正如你所看到的,这些信息有点过于多了。事实上,GStreamer的调试日志实在太冗余了,如果统统打开的话,很快就会让这个日志文件变成以M为单位的文件。这会让应用的运行速度降下来,所以,记录会被分类,你很少需要打开所有的种类。
& & & 第一个分类是调试等级,这个可以指定输出内容的等级:
为了允许调试内容输出,把GST_DEBUG的环境变量设置到需要的层级。所有该层级以下的信息都会显示。(比如,设GST_DEBUG=2,那么可以看到ERROR和WARNING信息)。
& & & 而且,每一个插件或者部分的GStreamer可以定义自己的种类,所以你可以对每个不同的种类指定各自的层级。例如,GST_DEBUG=2,audiotestsrc:5,会对audiotestsrc使用第5级调试等级,其余的使用第2级。
& & & 这样GST_DEBUG变量就是一个由逗号来分割的一系列“种类:层级”对了,除了在开始时给出一个默认等级值。
& & & '*'通配符也是可以使用的。例如,GST_DEBUG=2,audio*:5就是说明除了所有audio开头的种类用第5级之外,其余的都是用第2级。
& & & 使用
gst-launch-0.10 --gst-debug-help来获得所有注册的种类。记住每个插件都注册自己的种类,所以,当安装或者删除一个插件时,这个列表会变化。
& & & 当GStreamer总线上传上来的错误信息已经不够让你定位分析问题的时候,使用GST_DEBUG这个变量。常见的做法是把输出重定向到一个调试日志里面去,这样可以晚一点来查看。
& & & 调试输出的每一行的内容应该是:
09F62420 WARN
filesrc gstfilesrc.c:1044:gst_file_src_start:&filesrc0& error: No such file &non-existing-file.webm&
时间戳,HH:MM:SS:sssssssss,记录自从应用开始之后的时间
调试信息等级
调试信息种类
gstfilesrc.c:10444
文件名,行号
gst_file_src_start
&filesrc0&
发出消息的对象名
error:No such file &non-existing-file.webm&
错误消息内容
加入你自己的调试信息&
& & & 在你和GStreamer交互的那部分代码里面,使用GStreamer调试工具是很有意思的。在这种方法下,你会在同一个文件得到所有调试输出并且当时不同消息之间的联系也会保留下来。
& & & 为了做到这一点,请使用GST_ERROR(),GST_WARNING(),GST_INFO(),GST_LOG()和GST_DEBUG()宏。它们就像printf一样可以接受一些参数并且它们是使用默认种类的。
& & & 为了切换到某个更加有意义的种类,在你的代码之前增加这样两行:
GST_DEBUG_CATEGORY_STATIC (my_category);
#define GST_CAT_DEFAULT my_category
& & & 然后再用gst_init()初始化GStreamer之后加上:
GST_DEBUG_CATEGORY_INIT (my_category, &my category&, 0, &This is my very own&);
& & & 这会注册一个新的种类(这是在你的应用中,并不在任何文件里面),并把该种类设置成默认的。具体请查阅文档的GST_DEBUG_CATEGORY_INIT()内容。
获得pipeline图像
& & & 在那些pipeline变得很庞大连接关系已经看不清的例子中,GStreamer可以输出描述pipeline拓扑结构以及每个连接的Caps的协商的图像,这个文件是.dot文件,用GraphViz之类的免费软件就可以看了。
& & & 在复合element情况下,比如playbin2或者uridecodebin之类,这方法也很方便。.dot文件也可以把这些元素内部的情形绘制出来。
& & & 为了得到.dat文件,需要把GST_DEBUG_DUMP_DOT_DIR环境变量设置成你需要输出内容的文件夹。gst-launch会在每次状态变化时创建一个.dot文件,这样你可以看见Caps协商的演变。清楚这个环境变量就可以关闭这项功能。在你的应用里面,你可以使用GST_DEBUG_BIN_TO_DOT_FILE()和GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS()宏来在你方便的时候获得.dot文件。
& & & 这里你有一个用playbin2创建的pipeline的例子。因为playbin2可以处理各种各样的情形,所以它的内部十分复杂。你的手动创建的pipeline一般不会这么复杂。下面是playbin2的拓扑图:
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
一种Intel CE2110下的Gstreamer多格式媒体播放设计
下载积分:1000
内容提示:一种Intel CE2110下的Gstreamer多格式媒体播放设计
文档格式:PDF|
浏览次数:9|
上传日期: 08:53:24|
文档星级:
全文阅读已结束,如果下载本文需要使用
 1000 积分
下载此文档
该用户还上传了这些文档
一种Intel CE2110下的Gstreamer多格式媒体播放设计
官方公共微信视频开发(125)
& & & 有时我们的应用并没有按照我们的预期来工作,并且在总线上获得的错误信息也没有足够的内容。这时我们该怎么办呢?幸运的时,GStreamer自身提供了大量的调试信息,通常这些信息会给出一些线索,指向出错的地方。本教程主要讲述:
& & & 如何在GStreamer里面获得更多地调试信息
& & & 如何把你自己的调试信息加入GStreamer的调试记录
& & & 如何获得图形化的pipeline
打印调试信息
& & & GStreamer和插件里面都有大量的调试信息,也就是说,在调试区域内可以给出所有的信息,包括时间戳,线程,种类,源文件名,函数名等等等等
& & & 调试输出的控制实在一个GST_DEBUG的环境变量控制的,这里给出一个例子,GST_DEBUG=2:
& & & 正如你所看到的,这些信息有点过于多了。事实上,GStreamer的调试日志实在太冗余了,如果统统打开的话,很快就会让这个日志文件变成以M为单位的文件。这会让应用的运行速度降下来,所以,记录会被分类,你很少需要打开所有的种类。
& & & 第一个分类是调试等级,这个可以指定输出内容的等级:
& & &&为了允许调试内容输出,把GST_DEBUG的环境变量设置到需要的层级。所有该层级以下的信息都会显示。(比如,设GST_DEBUG=2,那么可以看到ERROR和WARNING信息)。
& & & 而且,每一个插件或者部分的GStreamer可以定义自己的种类,所以你可以对每个不同的种类指定各自的层级。例如,GST_DEBUG=2,audiotestsrc:5,会对audiotestsrc使用第5级调试等级,其余的使用第2级。
& & & 这样GST_DEBUG变量就是一个由逗号来分割的一系列“种类:层级”对了,除了在开始时给出一个默认等级值。
& & & '*'通配符也是可以使用的。例如,GST_DEBUG=2,audio*:5就是说明除了所有audio开头的种类用第5级之外,其余的都是用第2级。
& & & 使用gst-launch-0.10 --gst-debug-help来获得所有注册的种类。记住每个插件都注册自己的种类,所以,当安装或者删除一个插件时,这个列表会变化。
& & & 当GStreamer总线上传上来的错误信息已经不够让你定位分析问题的时候,使用GST_DEBUG这个变量。常见的做法是把输出重定向到一个调试日志里面去,这样可以晚一点来查看。
& & & 调试输出的每一行的内容应该是:
时间戳,HH:MM:SS:sssssssss,记录自从应用开始之后的时间
调试信息等级
调试信息种类
gstfilesrc.c:10444
文件名,行号
gst_file_src_start
&filesrc0&
发出消息的对象名
error:No such file &non-existing-file.webm&
错误消息内容
加入你自己的调试信息&
& & & 在你和GStreamer交互的那部分代码里面,使用GStreamer调试工具是很有意思的。在这种方法下,你会在同一个文件得到所有调试输出并且当时不同消息之间的联系也会保留下来。
& & & 为了做到这一点,请使用GST_ERROR(),GST_WARNING(),GST_INFO(),GST_LOG()和GST_DEBUG()宏。它们就像printf一样可以接受一些参数并且它们是使用默认种类的。
& & & 为了切换到某个更加有意义的种类,在你的代码之前增加这样两行:
& & & 然后再用gst_init()初始化GStreamer之后加上:
& & & 这会注册一个新的种类(这是在你的应用中,并不在任何文件里面),并把该种类设置成默认的。具体请查阅文档的GST_DEBUG_CATEGORY_INIT()内容。
获得pipeline图像
& & & 在那些pipeline变得很庞大连接关系已经看不清的例子中,GStreamer可以输出描述pipeline拓扑结构以及每个连接的Caps的协商的图像,这个文件是.dot文件,用GraphViz之类的免费软件就可以看了。
& & & 在复合element情况下,比如playbin2或者uridecodebin之类,这方法也很方便。.dot文件也可以把这些元素内部的情形绘制出来。
& & & 为了得到.dat文件,需要把GST_DEBUG_DUMP_DOT_DIR环境变量设置成你需要输出内容的文件夹。gst-launch会在每次状态变化时创建一个.dot文件,这样你可以看见Caps协商的演变。清楚这个环境变量就可以关闭这项功能。在你的应用里面,你可以使用GST_DEBUG_BIN_TO_DOT_FILE()和GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS()宏来在你方便的时候获得.dot文件。
& & & 这里你有一个用playbin2创建的pipeline的例子。因为playbin2可以处理各种各样的情形,所以它的内部十分复杂。你的手动创建的pipeline一般不会这么复杂。下面是playbin2的拓扑图:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:965771次
积分:13458
积分:13458
排名:第876名
原创:266篇
转载:815篇
评论:136条
文章:18篇
阅读:25049
文章:50篇
阅读:113887
文章:24篇
阅读:72334
文章:47篇
阅读:85308GStreamer SDK 1.0 Build Via Cerbero - 简书
GStreamer SDK 1.0 Build Via Cerbero
本文编写时基于GStreamer v1.11.0版,文中提及所有目录结构、文件、模块等信息也均以v1.11.0为标准。后续如GStreamer官方SDK有做较大变动,请自行适配。
1. GStreamer Introduction
是一个基于流水线的多媒体框架,其内部基于GObject,以C语言写成(参见)。GStreamer采用基于plugin和pipeline的体系机构,框架中所有的功能模块都是可插拔的plugins,可以很方便地安装到任意pipeline上。
1.1 GStreamer 环境
通常,在运行基于GStreamer开发的程序前,需要配置开发平台所需环境,建议直接下载已编译的,实在有特定需求(如裁剪、特定库支持)时,再考虑手动编译SDK。
GStreamer最新版本(1.11.0)中支持的系统具体如下:
Linux大部分Linux发行版均已提供GStreamer package,但部分发行版由于法律原因等会对GStreamer plugins进一步切割,因此可能不会包含gst-plugins-bad、gst-plugins-ugly及gst-libav pacakges
不同架构的package都有支持
提供相应版本MSI安装器,SDK共提供三种文件,分别为:
Runtime:运行GStreamer程序必需的文件,可能会随程序一同发布
Development:开发GStreamer程序额外所需的文件
Merge Modules:为GStreamer程序部署SDK所需的额外文件
提供相应的框架
提供可被集成入Android NDK的GStreamer Binaries
提供可被集成入XCode的GStreamer Binaries
1.2 GStreamer内部模块
依据plugins功能及实现算法性能的不同,GStreamer将其分为如下模块:
...其他模块
2. Cerbero编译系统
是一个服务于开源项目的多平台编译系统,它为不同体系、发行版的平台编译并创建本地化package。
2.1 Cerbero基础环境搭建
虽然Cerbero已经为各个平台提供了bootstrap(启动引导项),但仍需要一些基础环境来支持bootstrap。
由于Cerbero使用Python2.x(&= 2.6)开发编译脚本,因此不论是什么平台都必须安装Python,本教程中安装版本为v2.7。除此之外,各平台所需依赖项各有不同。具体如下:
在OSX上你需要安装如下软件:
Note:此次实际编译并未涉及OSX平台,因此IOS及OSX相关部分编译并未测试,如需编译SDK,可参照教程中通用部分或根据自行完成。
2.1.2 Linux(以Ubuntu为例)
测试环境为Ubuntu 14.04,其他版本或发行版仅供参考。需确认如下软件是否安装:
如当前环境中没有git工具,请先手动安装完成。
安装完成后,配置git信息。
git config --global user.email ""
git config --global user.name "xxxx"
Python 2.x
确认所使用的发行版中python版本&= 2.6且已添加python的argparse模块(Python2.7已默认支持)。
如出现正常安装步骤报错时,请尝试先手动sudo apt-get update && upgrade完善系统后重试。
2.1.3 Windows
Windows中环境配置较为复杂,编译SDK通常也相对耗时较长,但由于其中Directshow Plugins需使用到Directshow base classes,仍依赖Microsoft编译器和SDK完成编译,所以也无法通过Linux系统完美跨平台编译。
同时Cerbero默认使用Makefile进行所有项目的编译,类似Unix,因此如需在Windows中正常编译,必须首先配置Unix编译环境。
具体需安装项如下:
Python2.7 :
切记只能安装2.7版本,3.x版本并不支持
下载的x86版本可同样支持x64版本编译,安装时勾选添加至环境变量。
安装过程中选择“Checkout as-is, commit as-is"选项,其他保持默认
安装完成后,配置git信息。
git config --global user.email ""
git config --global user.name "xxxx"
Msys/MinGW :
勾选"Basic Setup"所有项进行安装。此处选择所有项为便捷做法,如有兴趣,可尝试去除如gcc-ada等项,以最小化安装
Wix 3.5 : Windows MSI打包工具,默认安装即可
Microsoft SDK 7.1 :
安装Win7.1 SDK GRMSDKX_EN_DVD.7z(带X),只有该包中存在amd64.msi,否则安装时因找不到文件报错而安装失败。
如安装过程中报错不能安装依赖于 .NET Framework 4的组件,则请下载并安装后重试。
Windows Driver Kit 7.1.0 :
安装GRMWDK_EN_7600_1.iso
安装完上述项后,由于Cerbero必须在MinGW shell中运行,因此必须为shell配置部分程序环境变量:
windows x86
echo 'export PATH="$PATH:/c/Python27:/c/Program Files(x86)/Git/bin:/c/MinGW/bin/
windows x64
echo 'export PATH="$PATH:/c/Python27:/c/Program Files/Git/bin:/c/MinGW/bin/"' & ~/.profile
Note:如生成的“.profile”文件与shell不位于同一路径下,请手动拷贝至同一路径下。并在shell中运行python、git、cmake命令确认已生效。
至此,Cerbero基础环境已搭建完成。
2.2 Cerbero基础编译过程
此处以Windows平台编译为示例,Linux可参照进行,步骤一致,唯一区别为打包后文件格式不同。
编译之前,需在shell中运行如下命令行进行版本库克隆:
git clone git://anongit.freedesktop.org/gstreamer/sdk/cerbero
clone成功后,目录结构(v1.11.0)如下图所示:
此处最好将cerbero完整文件夹内容拷贝值/home/usrxxx/下,以避免后面compile过程中出现完整路径过长而导致失败问题。具体可参造4.5小节内容。
可以看到文件夹上有勾选标号提示,这是的功能,Windows下平台可以更加便捷直观地查看git库文件,在裁剪SDK时有较大帮助,建议安装。当然,不安装也不影响后续操作。
可以看到根目录下存在 setup.py文件,而实际上cerbero编译工具使用前并不需要安装,只需要直接运行cerbero-uninstalled脚本及选项(可选)即可。
2.2.1 cerbero-uninstalled常用选项
编译之前,先简单了解下cerbero-uninstalled的常用选项:
./cerbero-uninstalled --help
其输出内容为:
usage: cerbero-uninstalled [-h] [-c CONFIG]
{add-recipe,rdeps,tag,genxcconfig,genlibfiles,check,list-packages,show-config,add-package,build,genvsprops,shell,run,cleanone,packageinfo,bundle-source,buildone,wipe,debug-packages,package,bootstrap,list,checkpackage,deps,gensdkshell,fetch-package,fetch}
Build and package a set of modules to distribute them in a SDK
positional arguments:
{add-recipe,rdeps,tag,genxcconfig,genlibfiles,check,list-packages,show-config,add-package,build,genvsprops,shell,run,cleanone,packageinfo,bundle-source,buildone,wipe,debug-packages,package,bootstrap,list,checkpackage,deps,gensdkshell,fetch-package,fetch}
sub-command help
add-recipe
Adds a new recipe
List the reverse dependencies of a recipe
Tag a git recipe or all git recipes using their
sdk-$version branch
genxcconfig
Generate XCode config files to use the SDK from VS
genlibfiles
Generate MSVC compatible library files (.lib)
Run checks on a given recipe
list-packages
List all the available packages
show-config
Show configuration settings
add-package
Adds a new package
Build a recipe
genvsprops
Generate Visual Studio property sheets to use the SDK
Starts a shell with the build environment
Runs a command in the cerbero shell
Clean a single recipe without its dependencies
packageinfo
Print information about this package
bundle-source
Bundle Source code of recipes and Cerbero
Build or rebuild a single recipe without its
dependencies
Wipes everything to restore the build system
debug-packages
Outputs debug information about package, like
duplicates files or files that do not belong to any
Creates a distribution package
Bootstrap the build system installing all the
dependencies
List all the available recipes
checkpackage
Run checks on a given package
List the dependencies of a recipe
gensdkshell
Create a script with the shell environment for the SDK
fetch-package
Fetch the recipes sources from a package
Fetch the recipes sources
optional arguments:
-h, --help
show this help message and exit
-c CONFIG, --config CONFIG
Configuration file used for the build
上面列出的命令实际上都定义于./cerbero/commands/路径下,以相应名称的python脚本文件形式存在,如:
虽然cerbero-uninstalled支持很多命令,但编译相关的并不多,这里仅介绍如下常用选项:
[-c CONFIG]
cerbero-unistalled编译时,如未使用该选项,则cerbero-unistalled使用默认配置(等价于变量)进行编译;如指定cbc文件,则使用指定配置完成编译。
可选择的CONFIG文件位于/config路径下,如下图所示:
列出所有可选的recipes;recipe用于指定某个模块的源、依赖项、编译步骤、产出库(动态、静态)等编译过程相关信息。
可选择的recipe文件位于/recipes目录下,由于数量较多,截取部分如下图所示:
list-packages
列出所有可打包的packages;打包实质上是将编译过程中各模块相关文件(头文件、库等),按照对应的package文件内容取出至指定路径,压缩并打包为对应平台文件。
可选择的package文件位于/packages路径下,如下图所示:
下载并安装当前环境下编译时所需工具
编译某个recipe,包括其依赖项
编译某个recipe,不包括其依赖项
清理某个recipe
打包某个package,递归遍历所有依赖项。
清理之前build过程中产生的所有文件,慎用
2.2.2 cerbero-uninstalled基础编译
本节内容阅读默认前面章节所述环境均已安装配置完善,继续阅读前,请确认均已完备。
选择只简单指定.cbc文件,而不修改配置文件(package、recipe、commands等)直接编译,可能存在如下问题:
模块依赖项多,打包操作内部遍历后整体所需编译模块较多,造成编译耗时长(虚拟机测试2天左右)
部分特定模块打包时并未勾选,造成安装编译后SDK无法提供相应环境支持
如可接受上述问题,则可按照如下步骤进行基础编译:
./cerbero-uninstalled -c config/xxx.cbc bootstrap
./cerbero-uninstalled -c config/xxx.cbc package gstreamer-1.0
编译成功后,将生成对应平台文件,如windows中msi,linux下tar.bz2文件等。
Note:编译过程中如出现错误,可先跳转至章节 “4. 问题-解决方法汇总”查看是否已有记录。
3. Cerbero配置
Cerbero内部使用了典型的oven-cookbook-recipe结构,结合其他功能命令、config等模块构建整个编译系统。
Projects通过recipes文件(.recipe)来定义,文件中描述了需要编译的项目信息,如name, version, license, sources和编译方法。同时,还提供了一些用于后续打包的文件。
Packages通过packages文件(.package)来定义,文件中描述了包信息,如name, version, license, maintainer和其他用于打包的内容。一个包内部包含了一系列recipes,安装时将进行展开。
3.1 定制编译步骤
如前所述,projects通过recipe文件来定义,build过程中会根据recipe内容进行编译。编译步骤实际上分为六步,分别为:
Post_install
第一次编译时,必须Fetch相关源以进行后续步骤,但通常在编译成功后,我们将不再希望所有模块每次编译时都自动更新为最新版本(稳定性不可控),此时可以将Fetch步骤去除,之后的build便会基于已有的源包进行编译。
./cerbero/build/recipe.py
3.2 指定模块编译版本
编译时,可能会出现某个模块的最新或特定版本存在bug,此时可通过指定模块编译版本来解决。
3.2.1 SourceType.GIT
以libffi为例, 修改下图中标示处:
其中commit等可从已clone下来的git版本库中获取,需为对应版本commit id。修改完成后,确认是否有其他相关内容需一并修改,此处需自行调整。
clean后重新build,测试通过。
3.2.2 SourceType.TARBALL
此处以faad2为例,修改下图中标示处:
修改version、url地址,url地址需访问链接进行手动确认,方法通常为去除末端版本字段,如faad2-2.7.tar.bz后访问。其他获取方法请自行研究。
3.2.3 SourceType.SVN
此处以Tremor为例,修改如下图标示处:
3.3 GStreamer SDK 裁剪
./cerbero-unistalled -c config/xxx.cbc package gstreamer-1.0
键入该命令行,可开始gstreamer-1.0 SDK的package动作。
SDK实质上是package所有recipe build后相关文件的产物,对应编译中参与的角色(总package、子package、模块),裁剪也分为如下三种:
3.3.1 总package裁剪-.package
gstreamer-1.0 的package文件位于路径 ./packages/gstreamer-1.0/下。
首先整体浏览下该package文件内容:
# -*- Mode: Python -*- vi:si:et:sw=4:sts=4:ts=4:syntax=python
class SDKPackage(package.SDKPackage):
name = "gstreamer-1.0"
shortdesc = "GStreamer 1.0"
longdesc = "GStreamer 1.0"
title = "GStreamer 1.0"
url = "http://gstreamer.freedesktop.org"
version = '1.9.0.1'
sdk_version = '1.0'
codename = 'Congo'
license = License.LGPL
uuid = 'b1b4b712-0d09-4a34-b6deecc2'
vendor = "GStreamer Project"
org = "org.freedesktop.gstreamer"
ignore_package_prefix = True
packages =[
# (name, required, selected)
('gstreamer-1.0-core', True, True),
#('gstreamer-1.0-system', False, True),
#('gstreamer-1.0-playback', False, True),
('gstreamer-1.0-codecs', False, True),
('gstreamer-1.0-effects', False, True),
#('gstreamer-1.0-net', False, True),
#('gstreamer-1.0-visualizers', False, True),
#('gstreamer-1.0-codecs-gpl', False, False),
('gstreamer-1.0-codecs-restricted', False, True),
#('gstreamer-1.0-net-restricted', False, False),
#('gstreamer-1.0-dvd', False, False),
#('gstreamer-1.0-libav', False, False),
#('gstreamer-1.0-encoding', False, False),
('gstreamer-1.0-capture', False, False),
#('gstreamer-1.0-editing', False, False),
('gstreamer-1.0-devtools', False, False),
platform_packages = {
Platform.WINDOWS: [
('vsintegration-1.0', True, False),
('gstreamer-1.0-vs-templates', True, False),
install_dir = {
Platform.WINDOWS: 'gstreamer',
Platform.LINUX: '/opt/gstreamer-1.0/',
Platform.DARWIN: '/Library/Frameworks/GStreamer.framework/',
Platform.IOS: '/Library/Developer/GStreamer/iPhone.sdk'
root_env_var = 'GSTREAMER_1_0_ROOT_%(arch)s'
wix_upgrade_code = {
PackageType.DEVEL: {
Architecture.X86 : 'c0ca--e900f594fd06',
Architecture.X86_64: '49c4a3aa-249f-453c-b82e-ecd05fac0693',
PackageType.RUNTIME: {
Architecture.X86 : 'ebe0c791-d84e-4f7e-a4eb-d',
Architecture.X86_64: 'c20a66dc-b249-4e6d-a68a-d0f836b2b3cf',
osx_framework_library = ('GStreamer', 'lib/GStreamer')
ios_framework_library = ('GStreamer', 'lib/GStreamer')
def prepare(self):
if self.config.target_platform in [Platform.ANDROID, Platform.IOS]:
p = ['gstreamer-1.0-dvd']
self.packages = [ x for x in self.packages if x[0] not in p]
if self.config.target_platform == Platform.IOS:
self.resources_postinstall = 'post_install_ios'
#self.user_resources = ['share/gst-sdk/tutorials/xcode iOS']
从面的代码中可以看出,裁剪过程中,只需要关注gstreamer-1.0.package文件的如下字段:
platform_packages对于不需要的子package可以直接使用#注释掉以裁剪。至于如何确认是否需要,就要打开各子package甚至更底层的模块recipe文件进行确认。
以gstreamer-1.0-codecs.package为例,如下图所示:
实际上,子package文件中也只是在deps、files、files_devel、platform_files这些字段中粗略列出相关模块和库,如需最终确认是否存在依赖或裁剪的空间,需进一步打开所引入的模块recipe文件。
以gst-plugins-good-1.0为例,子package
gstreamer-1.0-codecs.package中使用了其:plugins_codecs和:plugins_codecs_devel两项内容,因此我们只关注gst-plugins-good-1.0.recipe文件中的这两部分。
:plugins_codecs_devel字段不存在此时可以清晰地看到,子package中引入模块字段处其实是包含了模块中对应字段所有lib。如无需将这些lib打包到SDK中,则可在子package中移除对该字段的引入。
3.3.2 子package裁剪-.package
上节的裁剪是总package级别的,简单却也也粗暴,只能以package为单位进行裁剪,控制精度很低。实际上,为提高精度,可以对子package做进一步的裁剪。
以gstreamer-1.0-codecs.package为例,可做如下裁剪(具体裁剪内容根据需求决定):
3.3.3 模块裁剪-.recipe
上节的子package裁剪虽然已经比总package级别裁剪精密很多,但某些时候,我们可能只需要在最终SDK中包含某子package所引入模块字段中的一个lib,其他lib都可以去除,此时就需要进行模块级别的裁剪。
以gst-plugins-good-1.0.recipe为例,可做如下裁剪示例(其他字段可参照进行):
4. 问题-解决方法汇总
4.1 Git信息未配置
解决办法为根据提示配置信息:
git config --global user.email ""
git config --global user.name "xxxx"
4.2 Download certificate 验证
将参数check_cert=True修改为check_cert=False以关闭验证。
4.3 Console Unicode
is this one: Go to your Registry key HKEY_CURRENT_USER\Software\Microsoft\Command Processor and add String value Autorun = chcp 65001.
4.4 GPLed program for Windows NT/...
msgfmt是gettext中的一部分,使用gettext0.19.5中发现该系列程序运行会出错,而在gettext0.18.2中并未出现该问题。目前采用的方法是恢复使用0.18.2系列msgfmt程序替代。
4.5 webrtc-audio-processing compile error
查找到根本问题为make过程中对应.o文件拼接后
需cebero文件夹内容直接放置在home/usrxx/目录下以减少完整路径长度。
4.6Ubuntu Android SDK libmad缺失
解决方法为去除对libmad项的依赖,需修改文件有:
./recipes/gst-plugins-ugly-1.0.recipe
./recipes/gst-plugins-ugly-1.0-static.recipe
./packages/gstreamer-1.0-codec-restricted.package

我要回帖

更多关于 channelpipeline 的文章

 

随机推荐