本人也是刚刚接触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库是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
报错如下:
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)放在源文件的前面,而当编译器在源文件中遇到不能解析的函数时,在源文件之后的选项中寻找相关的信息,那么就出现了编译错误,也就是无法找到相关的函数定义。
在安装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
x264enc元件在ugly包里面。在编译ugly过程中,执行完./configure操作之后,会列出哪些元件will not build.查找x264enc无法编译的原因是因为没有安装x264enc的库。因此执行命令:
sudo apt-get install libx264-dev
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
之后
cd rtmpdump/
make
make install
sudo ldconfig
ldd rtmpdump
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