• 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 package_name    //列出头文件路径,供第三方编译使用,如果是/usr/include则不显示,因为这个是系统默认目录

      pkg-config --list-all           //列出所有安装的package

  • 相关阅读:
    智力题:砝码称重问题
    Java:Comparator接口
    机器学习中比较重要的几个概念
    NLP:Gensim库之word2vec
    Java遍历Map对象的四种方式
    给数据库减负刻不容缓:多级缓存设计
    CentOS6.10安装redis5.0
    Linux下安装whl文件
    Linux下安装Gensim
    Linux下安装jieba
  • 原文地址:https://www.cnblogs.com/Dreaming-in-Gottingen/p/14342634.html
Copyright © 2020-2023  润新知