GStreamer各个包构建
GStreamer按功能、维护的标准化程度、依赖库的版权差异等分了若干个包(package),如 gstreamer, gst-plugins-base, gst-plugins-good, gst-plugins-ugly,
gst-plugins-bad, gst-libav。不像FFmpeg按模块功能分几个文件夹(avformat,avcodec,avfilter等),而使用一个仓库来管理代码。
下面介绍下几个主要包的构建情况,排版格式和介绍逻辑未合理排列,读者自行脑补。
1. 包的构建
gstreamer:正常编译和安装
gst-plugins-base:正常编译和安装
gst-plugins-good:正常构建,其仅需的依赖是gstreamer和gst-plugins-base。
gst-plugins-bad:依赖gstreamer和gst-plugins-base包的安装。
gst-libav:依赖libavfilter,libavformat,libavcodec,libavutil,因gstreamer不带编解码器,而是依赖第三方编解码库,尤其是依赖ffmpeg编译出的库!
gst-devtools:依赖libjson-glib.so(使用apt-get install libjson-glib-dev安装)
2. 插件更新情况
通过apt-get install ffmpeg安装后,再编译good/bad/ugly包,插件都有相应的增加:
gst-plugins-good安装后,有74个plugin,74_plugins + 458_features
gst-plugins-bad安装后,有147个plugin,147_plugins + 623_features
gst-libav 安装后(拷贝libgstlibav.so至/usr/gst-dev/lib/i386-linux-gnu/gstreamer-1.0/目录),多了一个插件,148_plugins + 1231_features
//依赖libavcodec,libavformat等,需要加入到LD_LIBRARY_PATH
另外一个问题,为什么每次都要meson install了后gst-inspect-1.0才能出现libav的相关插件?
gst-plugins-ugly:156_plugins + 1247_features,其中x264属于ugly这个插件下的。
3. 一些遇到的细节说明
3.1 mp3解码器——mad
源码方式安装MP3解码器mad(mpeg audio decoder),验证插件更新情况。
使用apt-get安装的,只有libmad.so(解码库)和libgstmad.so(对接解码库的插件库),无mad库对应的头文件,那么说明安装发行版本的gst固定绑定某个版本的编解码库,
并且这种方式安装的编解码库不想被外部其他程序或库来链接。
mad在2016-12被移除,因为该codec已多年不再被维护,用mpeg123代替。
3.2 mp3编码库——lame
拷库方式安装MP3编码器lame(libmp3lame.so)和插件库libgstlame.so
A.确保编解码库libmad.so存在
B.拷贝对应的编码器适配库libgstmad.so到gstream-1.0目录
注意,每多了一个libgst*.so,就增加一个插件。
3.3 videosink模块
gst-play-1.0 播放视频,videosink使用了ximagesink(把apt-get安装的置于/usr/gst-dev/lib/i386-linux-gnu/gstreamer-1目录下,即可增加一个插件)
ximagesink兼容性较好,但耗资源,xvimagesink兼容性差,因缺乏显卡支持会失败,但效率高。autovideosink默认使用ximagesink。
3.4 aac编解码插件
源码安装faac/faad2编解码库,需要依赖安装automake、libtool
3.5 audio input/output插件
安装alsa库以支持alsa插件libgstalsa:sudo apt-get install alsa-base, alsa-utils, alsa-source,libasound2-dev
3.6 jpeg编解码插件
jpegdec/jpegenc插件,依赖libjpeg.so,使用apt-get install libjpeg-dev无法成功,只能使用源码方式编译后安装。
4. 包管理工具——pkg-config
对于一个比较大的第三方库,其头文件和库文件的数量是比较多的。如果我们自己的程序依赖这个第三方库,那么写Makefile依赖的LD_FLAG和INCLUDE时,
如果一个个手动地写,那将是相当麻烦的。所以,pkg-config就应运而生了。
pkg-config能够把这些头文件和库文件的位置指出来,给编译器使用,编译时可以这样指定第三方的头文件、库文件路径:
$gcc main.c `pkg-config --cflags --libs gtk+-2.0` -o main
描述某个库/头文件信息的*.pc文件,通常放置于/usr/shared/pkgconfig/目录下,pkg-config就是去读这个配置文件来确定某些包的库路径和头文件路径。
常用命令如下:
pkg-config --cflags xyz //列出头文件路径,供第三方编译使用,如果是/usr/include则不显示,因为这个是系统默认目录
pkg-config --list-all //列出所有安装的package
GStreamer各个包构建的更多相关文章
- 如何在ARM上运行k3s? 窥探k3s启动过程!,内附容器多平台包构建
开始之前 最近在对华为云鲲鹏服务器(一种ARM服务器arm64)运行容器可行性做验证,顺便了解了很多ARM和容器相关的知识.一提到arm运行容器首先想到的是k3s,下面是用k3s快速搭建一个kuber ...
- php的源代码包构建一个空的php扩展。
下载一个php的源代码包,这里使用的是php 4.0.5版,解压后会看到php的根目录下会有README.EXT_SKEL这样一个文件,打开详细阅读了一下,发现了一个非常好用的工具,这个工具可以帮你构 ...
- 使用FIDDER 抓包构建请求
FIDDER 是一个抓包利器,可以抓去浏览器的http请求. 工作原理是: FIDDER 作为代理. 1.在启动fidder时他自动启动服务监听8888端口. 2.启动FIDDER它会自动修改 ...
- Jenkins.war包构建Jenkins平台
[root@jenkins ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo [roo ...
- Linux下基于官方源代码RPM包构建自定义MySQL RPM包
rpmbuild时不要以root用户执行! 方法一: 1.首先安装rpmbuild #yum install rpm-build gcc gcc-c++ cmake bison ncurses-dev ...
- RPM包构建
参考资料 https://docs-old.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html-single/RPM_Guide/i ...
- Python 包构建教程
目录 setuptools 和 setup.py 你所需要做的事 & 一些概念 基础概念 关于源码分发文件和二进制分发文件 示例和分发选择 pure python module package ...
- R语言igraph 包-构建网络图
igaph 是一个项目,目标是建立一条简单,易用的网络分析工具,有 R, python, C/C++ 等语言的具体实现: 项目主页: http://igraph.org/ 在R语言中,对应的就是 ig ...
- Python 中的POST/GET包构建以及随机字符串的生成-乾颐堂
现在,我们来用Python,创建GET包和POST包. 至于有什么用处,大家慢慢体会. Python 中包含了大量的库,作为一门新兴的语言,Python 对HTTP有足够强大的支持. 现在,我们引入新 ...
随机推荐
- [MVC] - Asynchronous操作
最近在项目里遇到个问题,是在MVC的项目里处理异步操作的,操作流程是这样的: 1.从MVC的一个controller调用一个异步方法: public ActionResult CreateOrUpda ...
- springBoot整合Sentinel实现降级限流熔断
由于hystrix的停止更新,以及阿里Sentinel在历年双十一的贡献.项目中使用了Sentinel,今天我们来讲讲Sentinel的入门教程,本文使用1.6.3版本进行讲解 本文通过Sentine ...
- 有了它(powermock)再也不担心单元测试不达标了
为什么要写单元测试 优点:单元测试可以减少bug率,提升代码的质量.还可以通过单元测试来熟悉业务. 公司硬性要求:有些公司可能还会强制要求,每次新增代码.或者变更代码单测覆盖率要达到多少比例才能申请代 ...
- 嵌入式LInux-让开发板访问外网-ping bad address baidu.com
我的嵌入式设备已经接入网络.能够ping局域网ip.可是为了实现能够ping通外网.比如 ping baidu.com 还是不行的. 当运行ping baidu.com这个命令时,提示 ping ba ...
- http协议中的缓存机制
强缓存 - expires,服务器给客户端一个过期日期,如(2020-12-12),过了该时间,客户端请求服务器重新获取.存在问题:客户端与服务端存在时间差,会导致过期时间不准确 - Cache-co ...
- 用漫画的形式展现——什么是web
Web主要经历了web1.0和web2.0的阶段.万维网的初期都是web1.0的时代:静态页面. 在不同的时代,流行的web安全问题也不太相同.在web1.0时代,web安全主要是 Web1.0:sq ...
- HttpMessageConverter那回事
相信使用过Spring的开发人员都用过@RequestBody.@ResponseBody注解,可以直接将输入解析成Json.将输出解析成Json,但HTTP 请求和响应是基于文本的,意味着浏览器和服 ...
- Hbase-cdh5.14.2与kylin集成异常
1.原先使用版本:apache-kylin-2.5.1-bin-hbase1x 原生版本 启动报错出现异常: Failed to find metadata store by url: kylin_m ...
- 卷积神经网络学习笔记——Siamese networks(孪生神经网络)
完整代码及其数据,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/DeepLearningNote 在整理这些知识点之前,我 ...
- Spark内核解析
Spark内核概述 Spark内核泛指Spark的核心运行机制,包括Spark核心组件的运行机制.Spark任务调度机制.Spark内存管理机制.Spark核心功能的运行原理等,熟练掌握Spark内核 ...