ubuntu16.04 gstreamer源码安装

    本人也是刚刚接触gstreamer不久,在这里给大家分享下在ubuntu 16.04源码安装gstreamer和相关插件的流程,同时也在此对遇到的问题做个记录。网上有不少关于通过apt-get 的方式进行安装gstreammer的教程,我没有对这种方法进行试验,源码安装可以自由选择安装版本。由于我需要实现将本地avi视频数据上传到rtmp服务器,所以会安装所需要的相关插件,对涉及到部分元件的编译无法安装的问题也进行了总结。主要涉及到的元件是x264enc、rtmpsrc、rtmpsink。

    gtreamer 是一个基于glib库(目前最新版本需要glib2.0)用来构建流媒体应用的编程框架,其目标是要简化音/视频应用程序的开发,目前已经能够被用来处理 像 MP3、Ogg、MPEG1、MPEG2、AVI、Quicktime 等多种格式的多媒体数据。因此在源码安装之前首先需要安装glib库。

一 源码安装glib

    glib库是GTK+和GNOME工程的基础底层核心程序库,是一个综合用途的实用的轻量级的C程序库,它提供C语言的常用的数据结构的定义、相关的处理函数,有趣而实用的宏,可移植的封装和一些运行时机能,如事件循环、线程、动态调用、对象系统等的API。它能够在类UNIX的操作系统平台(如LINUX、HP-UNIX等)、WINDOWS、OS2和BeOS等操作系统台上运行。

 

本文将介绍在linux下源码安装glib库的过程,这过程很麻烦,一点都不轻松,故记录下。

------

 

1、安装glib

http://ftp.acc.umu.se/pub/GNOME/sources/glib/

我下载了个glib-2.48.1.tar.xz,如果是.tar.xz格式用tar -xvf解压,如果是.tar.gz格式用tar -zxvf解压

解压后进入目录后,编译安装三部曲,需在管理员权限下进行安装:

./configure
make
make install

看起来是简单,但第一步./configure问题多多,需要安装的相关依赖也比较多,诸多问题请看下面各种解决法子。

 

2、zlib问题

报错如下:

configure: error: *** Working zlib library and headers not found ***

自glib-2.23开始就需要zlib,zlib是提供数据压缩用的函式库。

http://www.zlib.net/ (下载地址在网页的中间部分)

我下载了个zlib-1.2.8.tar.gz,解压、进目录,三部曲:

./configure
make
make install

3、libffi问题

报错如下:

No package 'libffi' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables LIBFFI_CFLAGS
and LIBFFI_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

"FFI" 的全名是Foreign Function Interface,通常指的是允许以一种语言编写的代码调用另一种语言的代码。而libffi库只提供了最底层的、与架构相关的、完整的"FFI",在它之上必须有一层来负责管理两种语言之间参数的格式转换。

http://sourceware.org/libffi/

我下载了libffi-3.2.1.tar.gz,解压、进目录,三部曲:

./configure
make
make install

4、libmount 问题

报错如下:

configure: error: *** Could not find libmount

直接apt-get安装即可

sudo apt install libmount-dev

5、pkg-config问题

报错如下:

configure: error: The pkg-config script could not be found or is too old.  Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config.

pkg-config能根据软件安装时软件的.pc配置文件路径找到相应的头文件路径和库文件路径。(之后编译时也需要根据pkg-config工具来寻找库文件路径)

https://www.freedesktop.org/wiki/Software/pkg-config/

我下载了pkg-config-0.29.1.tar.gz,解压、进目录,三部曲:

./configure --with-internal-glib
make
make install

如果第一步单单运行./configure将遇到如下错误:

configure: error: Either a previously installed pkg-config or "glib-2.0 >= 2.16" could not be found. Please set GLIB_CFLAGS and GLIB_LIBS to the correct values or pass --with-internal-glib to configure to use the bundled copy.

6、pcre问题

报错如下:

configure: error: Package requirements (libpcre >= 8.13) were not met:

No package 'libpcre' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables PCRE_CFLAGS
and PCRE_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括perl兼容的正则表达式库。这些在执行正规表达式模式匹配时用与Perl 5同样的语法和语义是很有用的,也可以来解决C语言中使用正则表达式的问题。

https://sourceforge.net/projects/pcre/files/pcre/(参考文章所提供的链接,下载速度比较慢)

ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/(此下载速度亲测。)

我下载了pcre-8.38.tar.gz,解压、进目录,改动的三部曲:

./configure --enable-utf8 --enable-unicode-properties
make
make install

如果第一步只是./configure,到时候安装glib会继续报错:

checking for Unicode support in PCRE... no
configure: error: *** The system-supplied PCRE does not support Unicode properties or UTF-8.

所以第一步是为了解决Unicode、UTF-8的支持,仅限于pcre7.9以上版本

*安装pcre如果报错如下:

configure: error: You need a C++ compiler for C++ support

那是你所用的linux没支持c++编译,只需要:

apt-get install build-essential

**当安装好pcre后,输入pcretest -C来打印pcre的安装情况,一般输出如下:

复制代码

PCRE version 8.38 2015-11-23
Compiled with
  8-bit support
  UTF-8 support
  Unicode properties support
  No just-in-time compiler support
  Newline sequence is LF
  \R matches all Unicode newlines
  Internal link size = 2
  POSIX malloc threshold = 10
  Parentheses nest limit = 250
  Default match limit = 10000000
  Default recursion depth limit = 10000000
  Match recursion uses stack

复制代码

而如果报错为:

pcretest: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory

pcretest: error while loading shared libraries: libpcreposix.so.0: cannot open shared object file: No such file or directory

这种情况好像大多数linux都会发生,只需要自己建立一个软链接即可,如果linux系统是64位,需要把/lib换成/lib/64(四个命令都执行最保险):根据错误来选择运行哪个命令,一般是第一个和第三个就可以

ln -s /usr/local/lib/libpcre.so.1 /lib
ln -s /usr/local/lib/libpcre.so.1 /lib/64
ln -s /usr/local/lib/libpcreposix.so.0 /lib
ln -s /usr/local/lib/libpcreposix.so.0 /lib/64

7、glib使用方法

现在写一个简单的c语言代码,命名为hello.c

#include 
int main(int argc, char** argv){
    GList* list=NULL;
    list=g_list_append(list,"Hello world!");
    list=g_list_append(list,"made by pcat");
    list=g_list_append(list,"http://pcat.cnblogs.com");
    printf("The first item is %s\n",g_list_first(list)->data);
    return 0;
}

编译如下:

 
gcc hello.c -o hello $(pkg-config --cflags --libs glib-2.0)

./hello

很多教程会使用下面的编译方法,在一些linux上会报错。

gcc $(pkg-config --cflags --libs glib-2.0) hello.c -o hello
undefined reference to `g_list_append'
undefined reference to `g_list_first'

那是因为有些gcc存在编译参数的顺序问题,$(pkg-config --cflags --libs glib-2.0)放在源文件的前面,而当编译器在源文件中遇到不能解析的函数时,在源文件之后的选项中寻找相关的信息,那么就出现了编译错误,也就是无法找到相关的函数定义。

 

二、ubuntu16.04安装gstreamer的的步骤

    在安装gstreamer的过程中,一定要特别注意安装顺序,因为gst-plugins-base依赖于orc,所以需要在安装base之前装好orc。所有的good、ugly、bad插件都依赖于base插件,所以要首先安装base插件。如果需要相关的编解码元件比如decodebin必须要安装gst-libav这个包,否则在使用插件过程中会遇到一系列找不到相关解码函数的问题(此问题折腾了我一整天的时间)。

在安装gsteamer的过程中可能会遇到以下错误

1. 找不到bision

configure: error: Could not find bison

$sudo apt-get install bison

2.找不到flex

 configure: error: Could not find flex

$sudo apt-get install flex

3.找不到zlib

 configure: error: *** Working zlib libraryand headers not found***

$sudo apt-get install zlib1g

具体安装步骤如下

1、 首先下载所需的安装包

https://gstreamer.freedesktop.org/src/

gstreamer-1.8.0.tar.xz

orc-0.4.22.tar.xz

gst-plugins-base-1.8.0.tar.xz

gst-plugins-good-1.8.0.tar.xz

gst-plugins-ugly-1.8.0.tar.xz

gst-plugins-0.8.11.tar.gz

gst-libav-1.8.0.tar.xz

2、 下载所需的库

libxml2-2.7.8.tar.gz //连接ftp://xmlsoft.org/libxml2/

glib-2.55.1.tar.gz   //https://ftp.gnome.org/pub/GNOME/sources/glib/(如果第一步已经安装,无需再次安装)

3、 安装libxzml2

sudo tar –zxvf libxml2-2.7.8.tar.gz

cd libxml2-2.7.8/

sudo ./configure

sudo make

sudo make install

4、 安装glib-2.55.1

sudo xz –d glib-2.55.1.tar.gz

sudo tar –zxvf glib-2.55.1.tar.gz

cd glib-2.55.1/

sudo ./configure

sudo make

sudo make install

5、 安装gstreamer

sudo tar –xvf gstreamer-1.8.0.tar.gz

cd / gstreamer-1.8.0/

sudo ./configure

sudo make

sudo make install

6、 安装orc-0.4.22.tar.xz

sudo tar -xvf orc-0.4.22.tar.xz

cd  orc-0.4.22/

sudo ./configure

sudo make

sudo make install

 

7、 安装gst-plugins-base-1.8.0.tar.xz

sudo tar –xvf gst-plugins-base-1.8.0.tar.xz

cd  gst-plugins-base-1.8.0/

sudo ./configure

sudo make

sudo make install

8、 安装 gst-plugins-good-1.8.0.tar.xz

sudo xz –d gst-plugins-good-1.8.0.tar.gz

sudo tar –xvf gst-plugins-good-1.8.0.tar

cd  gst-plugins-good-1.8.0/

sudo ./configure

sudo make

sudo make install

9、安装gst-plugins-ugly-1.8.0,

sudo tar –zxvf gst-plugins-ugly-1.8.0.tar.gz

cd  gst-plugins-ugly-1.8.0/

sudo ./configure

sudo make

sudo make install

10、安装gst-plugins-bad-1.8.0

 

sudo tar –zxvf gst-plugins-bad-1.8.0.tar.gz

cd  gst-plugins-bad-1.8.0/

sudo ./configure

sudo make

sudo make install

 

11、安装gst-plugins-0.8.11.tar.gz

 

sudo tar –zxvf gst-plugins-0.8.11.tar.gz

cd  gst-plugins-0.8.11/

sudo ./configure

sudo make

sudo make install

12安装gst-libav-1.8.0.tar.xz

在安装之前首先需要安装yasm的依赖包,

直接在终端输入 sudo apt-get install yasm ,安装好后,重新编译就 OK了

同时再进行gst-libav的安装即可。

13配置环境变量

可能还需要设置具体的参数。

安装后相关文件的默认路径或在安装时配置的路径:

配置环境变量

export LD_LIBRARY_PATH=/usr/local/lib

export GST_PLUGIN_PATH=/usr/local/lib:/usr/lib/x86_64-linux-gnu/gstreamer-1.0

三、部分元件无法编译

1.x264enc 元件

x264enc元件在ugly包里面。在编译ugly过程中,执行完./configure操作之后,会列出哪些元件will not build.查找x264enc无法编译的原因是因为没有安装x264enc的库。因此执行命令:

sudo apt-get install libx264-dev

2 rtmp元件(有错误,按照链接里的安装!!!)

rtmpsrc和rtmpsink在bad包里面。编译完之后显示没有librtmp,需要编译libRTMP,首先需要安装配置编译环境。编译libRTMP之前,需要安装下面三个软件:openssl , zlib, libssl-dev。

1 、安装相关依赖

(1)安装openssl

方法1:sudo apt-get install openssl

方法2:(在方法1出现错误时,或者安装完成之后rtmp元件不可用可尝试此方法进行安装

 这里需要特别的注意:openssl 版本不能太高,太高有些接口与libRTMP 的接口不一样,会导致libRTMP编译不能通过。我这里安装的是openssl-1.0.1f。

1、下载地址:http://www.openssl.org/source/ 下一个新版本的OpenSSL,我下的版本是:openssl-1.0.1f

2、在下载的GZ目录中,用命令执行:tar -xvf openssl-1.0.1f.tar.gz

3、进入解压的目录:openssl-1.0.1f  [.......]#cd openssl-1.0.1f

4、[.....openssl-1.0.1f]# ./config --prefix=/usr/local/openssl

5[...../openssl-1.0.1f]# ./config -t

6[...../openssl-1.0.1f]# make depend
 

7[...../openssl-1.0.1f]# cd /usr/local

8/usr/local]# ln -s openssl ssl

9 [...../openssl-1.0.1f]#sudo make install

 

10在/etc/ld.so.conf文件的最后面,添加如下内容:

 

/usr/local/openssl/lib

11...]# ldconfig

 

12添加OPESSL的环境变量:
在etc/的profile的最后一行,添加:
export OPENSSL=/usr/local/openssl/bin

 

export PATH=$OPENSSL:$PATH:$HOME/bin

13退出命令界面,再从新登录。

14、以上OPENSSL就安装完毕,下面进行一些检查。

 

15依次如下执行:
[root@localhost /]# cd /usr/local
[root@localhost local]# ldd /usr/local/openssl/bin/openssl
会出现类似如下信息:
        linux-vdso.so.1 =>  (0x00007fff2116a000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f378e239000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f378de7c000)

 

        /lib64/ld-linux-x86-64.so.2 (0x00007f378e44f000)

 

16查看路径
...]# which openssl

 

/usr/local/openssl/bin/openssl

 

17查看版本
...]# openssl version
OpenSSL 1.0.1f 6 Jan 2014

 

(2)安装zlib(如果在安装glib过程中已安装zlib,无需再重复安装)

sudo apt-get install zlib1g-dev

(3)安装libssl-dev

sudo apt-get install libssl-dev

2 、安装RTMP

方法1 :git的安装命令sudo apt-get install git-core

直接GIT安装。记得去你自己的目录下装。

git clone git://git.ffmpeg.org/rtmpdump
  • 1

之后

cd rtmpdump/
make
make install
sudo ldconfig 
ldd rtmpdump
  • 1
  • 2
  • 3
  • 4
  • 5

ldconfig 更新动态库缓存 

ldd rtmpdump 检查rtmpdump所有依赖库是否都引用成功

方法2 源码包安装

 

下载rtmpdump-2.3 可直接编译安装, rtmpdump主页: http://rtmpdump.mplayerhq.hu/

tar -xvf  rtmpdump-2.3.tgz

cd rtmpdump-2.3

make

make install

rtmpdump安装完成之后,rtmpdump -h测试是否正确安装。

之后再重新编译安装bad包即可。

通过gst-inspect1.0 rtmpsrc 测试是否安装正确。

 

三、程序编译方法

编译gstreamer的程序需要一点技巧:用的不是简单的gcc,而是
gcc -Wall  helloworld.c -o helloworld $(pkg-config –cflags –libs gstreamer-0.10)
这是pkg-config 的作用是自动找到编译该程序需要的编译器选项。该选项存在gstreamer-0.10.pc文件中,是由
configure生成的。

上述都是本人在参考了下面网址之后进行的亲测总结。第一次写博客,不足之处望多多海涵。博客在学习中给与了我很大的帮助,希望以后可以坚持住,将自己遇到的问题分享给大家,一起交流。

https://blog.csdn.net/chilv/article/details/79078948

https://blog.csdn.net/a1317338022/article/details/78152864

https://blog.csdn.net/laiusffc/article/details/52775849

https://blog.csdn.net/nan_nan_nan_nan_nan/article/details/77802414

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

来源:https://blog.csdn.net/chilv/article/details/79078948

 

你可能感兴趣的:(gstreamer,ubunutu,gstreamer,rtmpdump,glib)