分享

Gstreamer的编译以及配置要点[初次总结]

 开花结果 2021-08-27

前言

Gstreamer是一个与ffmpeg齐名的音视频处理库,不过国内一般用的是ffmpeg--其实 gstreamer也蛮好用的。。。

这篇文章主要说明一下如何编译gstreamer以及安装配置插件--起码不会报 插件not found的错误吧。

这一篇文章是经过了:

GStreamer编译要点+插件需要进行的配置 [草稿]

洗礼的,不能保证100%正确,但是思路肯定是正确的。

配置过程

meson

gstreamer的最新版本都用的meson进行构建,所以, meson以及ninja怎么也得要安装配置一下的。包括pkgconfig

libnice

其他依赖我就不说了, 自行查看以及安装。

不过libnice不得不说一下,因为它有两点重要的地方:

1、Gstreamer有些插件依赖于libnice的,如果libnice无法正常运行的话,那么到时候插件就会加载失败,结果会出现无法找到插件的错误,例如,webrtc插件--这个插件是很重要的,音视频处理最后肯定要与webrtc进行对接,做实时处理的。

例如,笔者被这个问题都弄疯了:

 ps:提示两点, libnice请使用openssl来编译且openssl的版本要是1.0----openssl的版本一直是一个大问题, openssl1.1在很多库上面譬如,librtmp上面都是无法编译通过的,必须使用openssl1.0---而我们的系统,比如,ubuntu默认自带的openssl版本号是1.1,那么就会出现上面的问题---你编译的libnice使用的是openssl1.1,但是结果找不到某些参数或者函数。

2、libnice编译后同时会生成gstreamer相关的插件,就叫:

libgstnice.so

例如这里,

 

编译后会有一个文件夹目录:

gstreamer-1.0

这里先提前说明,gstreamer所有插件的动态库都放在gstreamer-1.0目录下面的, 到时候你要在 ~/.bashrc下面配置一个GST_PLUGIN_PATH的环境变量 才能让gstreamer正常加载插件,先记住有这个nice插件,等下编译完gstreamer以后再复制到真正的插件目录----如果你编译的时候采用的是默认的路径:/usr/local/ 那么,gstreamer的插件目录就是在 /usr/local/lib/x86-64-linux-gnu/gstreamer-1.0/下面,如果是/usr/local/gst-1.0 那么结构就是:

  libnice的编译

ps:在编译libnice之前请确保自己已经编译了openssl1.0,例如我编译的openssl版本以及pkgconfig配置如下:

  并且配置了正确的pkgconfig----你编译的openssl的优先级位置起码要高于其他openssl库的位置吧,例如:

 

libnice也是使用的meson进行编译的,编译的代码如下:

_tmp_archive='libnice-0.1.17.tar.gz'

_archive_folder=${_tmp_archive%%".tar.gz"}

bd_zip=$_tmp_archive

bd_folder=$_archive_folder

bd_task=$_archive_folder

    echo "*** 解压缩以及编译 $bd_task ***"

    cd $DOWNLOAD_DIR/

    rm -rf "$BUILD_DIR/$bd_folder"

    tar xf "$bd_zip"

    mv "$bd_folder" "$BUILD_DIR/"

    echo "解压到:$BUILD_DIR/$bd_folder"

    cd "$BUILD_DIR/$bd_folder"

##./autogen.sh

##make -j4

##make install

mkdir build

## 新版本的gstreamer使用的是meson构建系统

meson build -Dcrypto-library=openssl

# cd build

ninja -C build

## 安装命令

ninja -C build install

顺利的话你会看到以下这些:

 如果不知道自己安装在案例的请使用:

sudo find / -name ligbstnice.so

来查找一下。

gstreamer编译+配置

综述,要编译的gstreamer本体+插件如下

  

首先,我定义了一个目录用于编译gstreamer -- 那就是:

/usr/local/gst-1.0

因为编译过程不知道会遇到什么,分出一个目录比较保险。

下面首先编译的是gstreamer-1.18.2,脚本如下:

function build_gstramer(){

_tmp_archive='gstreamer-1.18.2.tar.gz'

_archive_folder=${_tmp_archive%%".tar.gz"}

bd_zip=$_tmp_archive

bd_folder=$_archive_folder

bd_task=$_archive_folder

if [ $is_x86 -eq 1  ]; then

    echo "*** 解压缩以及编译 $bd_task ***"

    cd $DOWNLOAD_DIR/

    rm -rf "$BUILD_DIR/$bd_folder"

    tar xf "$bd_zip"

    mv "$bd_folder" "$BUILD_DIR/"

    echo "解压到:$BUILD_DIR/$bd_folder"

    cd "$BUILD_DIR/$bd_folder"

## ./autogen.sh --disable-gtk-doc

## ./configure --prefix=/usr/local/gst-1.0 --disable-nvdec 

## make -j $jval

## make install

## 新版本的gstreamer使用的是meson构建系统

mkdir build

meson --prefix=/usr/local/gst-1.0 build 

# cd build

ninja -C build

## 安装命令

ninja -C build install

fi

}

然后顺利的话会看到:[类型目录结构,因为我这边已经编译好,现在是总结编译过程,所以文件会多很多的]:

  

好了, 因为后续的插件编译肯定会依赖于gstreamer本体的,所以,现在要进行几个地方的配置:

1、pkgconfig的配置---编译时候会通过pkgconfig来查找对应的lib的

2、ld.so.conf -- 运行程序的时候起码会通过这个文件查找动态库的,如果不将gst-1.0的目录加进去是没办法正常运行的

3、~/.bashrc -- 需要配置gst的插件目录,让gstreamer能够正常加载插件。

pkgconfig 环境变量配置

首先找到gstreamer的pkgconfig目录,你如果要找的话会发现:

  

这种形式的,然后:

sudo vim /etc/profile
找到:
PKG_CONFIG_PATH,然后将:
/usr/local/gst-1.0/lib/x86_64-linux-gnu/pkgconfig/
添加进去,譬如:

  

ld.so.conf的配置

sudo vim /etc/ld.so.conf
然后将:
/usr/local/gst-1.0/lib/x86_64-linux-gnu/
添加进去

例如:

  

.bashrc的配置

这里先指明一个概念,那就是gstreamer的插件路径

先前看到有篇文章是这样说的:

$sudo vim .bashrc(在文件最后新增以下内容保存退出)    

export LD_LIBRARY_PATH=/usr/local/lib    

export GST_PLUGIN_PATH=/usr/local/lib:/usr/lib/aarch64-linux-gnu/gstreamer-1.0  //此处需要根据实际的环境,不一定为aarch64-linux-gnu

$source .bashrc

  地址为:

https://www.cnblogs.com/grandblogs/p/12123186.html

后来经过我反复验证--错了,不对, 只有下面这个目录才是插件存放地,其他的都不要填上去,否则gstreamer是真的会尝试加载然后报错给你看的:

  

那么,我们要配置的参数就很明显了:

vim ~/.bashrc

然后输入:

export LD_LIBRARY_PATH=/usr/local/gst-1.0/lib:/usr/local/gst-1.0/lib/x86_64-linux-gnu/:$LD_LIBRARY_PATH

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

如下图:

  

然后,---下面就可以继续编译base、good、bad、ugly、libav几个插件合集了,下面是编译代码:

function build_gstramer_base(){

_tmp_archive='gst-plugins-base-1.8.1-1kurento2.tar.xz'

_tmp_archive='gst-plugins-base-1.16.2.tar.xz'

_tmp_archive='gst-plugins-base-1.18.2.tar.gz'

_archive_folder=${_tmp_archive%%".tar.gz"}

bd_zip=$_tmp_archive

bd_folder=$_archive_folder

bd_task=$_archive_folder

if [ $is_x86 -eq 1  ]; then

    echo "*** 解压缩以及编译 $bd_task ***"

    cd $DOWNLOAD_DIR/

    rm -rf "$BUILD_DIR/$bd_folder"

    tar xf "$bd_zip"

    mv "$bd_folder" "$BUILD_DIR/"

    echo "解压到:$BUILD_DIR/$bd_folder"

    cd "$BUILD_DIR/$bd_folder"

## ./autogen.sh --disable-gtk-doc

## ./configure --prefix=/usr/local/gst-1.0 --disable-nvdec 

## make -j $jval

## make install

## 新版本的gstreamer使用的是meson构建系统

mkdir build

meson --prefix=/usr/local/gst-1.0 build 

# cd build

ninja -C build

## 安装命令

ninja -C build install

fi

}

function build_gstramer_good(){

_tmp_archive='gst-plugins-good-1.8.1-1kurento3.tar.xz'

_tmp_archive='gst-plugins-good-1.18.2.tar.gz'

_archive_folder=${_tmp_archive%%".tar.gz"}

bd_zip=$_tmp_archive

bd_folder=$_archive_folder

bd_task=$_archive_folder

if [ $is_x86 -eq 1  ]; then

    echo "*** 解压缩以及编译 $bd_task ***"

    cd $DOWNLOAD_DIR/

    rm -rf "$BUILD_DIR/$bd_folder"

    tar xf "$bd_zip"

    mv "$bd_folder" "$BUILD_DIR/"

    echo "解压到:$BUILD_DIR/$bd_folder"

    cd "$BUILD_DIR/$bd_folder"

## ./autogen.sh --disable-gtk-doc

## ./configure --prefix=/usr/local/gst-1.0 --disable-nvdec 

## make -j $jval

## make install

## 新版本的gstreamer使用的是meson构建系统

mkdir build

meson --prefix=/usr/local/gst-1.0 build 

# cd build

ninja -C build

## 安装命令

ninja -C build install

fi

}

function build_gstramer_bad(){

_tmp_archive='gst-plugins-bad-1.8.1-1kurento4.tar.xz'

_tmp_archive='gst-plugins-bad-1.18.2.tar.gz'

_archive_folder=${_tmp_archive%%".tar.gz"}

bd_zip=$_tmp_archive

bd_folder=$_archive_folder

bd_task=$_archive_folder

if [ $is_x86 -eq 1  ]; then

    echo "*** 解压缩以及编译 $bd_task ***"

    cd $DOWNLOAD_DIR/

    rm -rf "$BUILD_DIR/$bd_folder"

    tar xf "$bd_zip"

    mv "$bd_folder" "$BUILD_DIR/"

    echo "解压到:$BUILD_DIR/$bd_folder"

    cd "$BUILD_DIR/$bd_folder"

## ./autogen.sh --disable-gtk-doc

## ./configure --prefix=/usr/local/gst-1.0 --disable-nvdec 

## make -j $jval

## make install

## 新版本的gstreamer使用的是meson构建系统

mkdir build

meson --prefix=/usr/local/gst-1.0 build  -Dhls-crypto=openssl

# cd build

ninja -C build

## 安装命令

ninja -C build install

fi

}

function build_gstramer_livav(){

_tmp_archive='gst-libav-1.18.2.tar.gz'

_archive_folder=${_tmp_archive%%".tar.gz"}

bd_zip=$_tmp_archive

bd_folder=$_archive_folder

bd_task=$_archive_folder

if [ $is_x86 -eq 1  ]; then

    echo "*** 解压缩以及编译 $bd_task ***"

    cd $DOWNLOAD_DIR/

    rm -rf "$BUILD_DIR/$bd_folder"

    tar xf "$bd_zip"

    mv "$bd_folder" "$BUILD_DIR/"

    echo "解压到:$BUILD_DIR/$bd_folder"

    cd "$BUILD_DIR/$bd_folder"

## ./autogen.sh --disable-gtk-doc

## ./configure --prefix=/usr/local/gst-1.0 --disable-nvdec 

## make -j $jval

## make install

## 新版本的gstreamer使用的是meson构建系统

mkdir build

meson --prefix=/usr/local/gst-1.0 build 

# cd build

ninja -C build

## 安装命令

ninja -C build install

fi

}

function build_gstramer_ugly(){

_tmp_archive='gst-plugins-ugly-1.18.2.tar.gz'

_archive_folder=${_tmp_archive%%".tar.gz"}

bd_zip=$_tmp_archive

bd_folder=$_archive_folder

bd_task=$_archive_folder

if [ $is_x86 -eq 1  ]; then

    echo "*** 解压缩以及编译 $bd_task ***"

    cd $DOWNLOAD_DIR/

    rm -rf "$BUILD_DIR/$bd_folder"

    tar xf "$bd_zip"

    mv "$bd_folder" "$BUILD_DIR/"

    echo "解压到:$BUILD_DIR/$bd_folder"

    cd "$BUILD_DIR/$bd_folder"

## ./autogen.sh --disable-gtk-doc

## ./configure --prefix=/usr/local/gst-1.0 --disable-nvdec 

## make -j $jval

## make install

## 新版本的gstreamer使用的是meson构建系统

mkdir build

meson --prefix=/usr/local/gst-1.0 build 

# cd build

ninja -C build

## 安装命令

ninja -C build install

fi

}

然后,最后,还记得libgstnice.so吗?

sudo cp /usr/local/lib/x86_64-linux-gnu/gstreamer-1.0/libgstnice.so /usr/local/gst-1.0/lib/x86_64-linux-gnu/gstreamer-1.0/

将它复制到插件目录,然后你会发现:

  nice插件也能正常运行了。


原文链接:https://blog.csdn.net/cdnight/article/details/112093636

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多