1. 程式人生 > >ubuntu16.04 gstreamer原始碼安裝

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

我下載了個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是提供資料壓縮用的函式庫。

我下載了個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",在它之上必須有一層來負責管理兩種語言之間引數的格式轉換。

我下載了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工具來尋找庫檔案路徑)

我下載了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語言中使用正則表示式的問題。

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 <glib.h>
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、 首先下載所需的安裝包

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依次如下執行:
[[email protected] /]# cd /usr/local
[[email protected] 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 原始碼包安裝

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

相關推薦

ubuntu16.04 gstreamer原始碼安裝

    本人也是剛剛接觸gstreamer不久,在這裡給大家分享下在ubuntu 16.04原始碼安裝gstreamer和相關外掛的流程,同時也在此對遇到的問題做個記錄。網上有不少關於通過apt-get 的方式進行安裝gstreammer的教程,我沒有對這種方法進行試驗,原始

Ubuntu16.04原始碼安裝TensorFlow(CPU only, python3.5)

好大一個坑!趕快跑!我們跳過去! TensorFlow原始碼下載https://github.com/tensorflow/tensorflow 順便小手一戳到安裝指引的link:https://www.tensorflow.org/install/ 選擇對應的系統,這裡用Ubunt

Bullet3-2.87在Ubuntu16.04原始碼編譯安裝

編譯安裝Bullet3-2.87 安裝過程其實很簡單,有多重原始碼安裝方法,這裡提供兩種: 方法1: cd bullet3-2.87 mkdir build && cd build cmake .. make sudo make ins

【Caffe】Ubuntu16.04上配置安裝caffe(Only CPU)

nts dia 使用 word sci oos evel 成功 eve 一、首先看看自己的系統,Ubuntu16.04,cpu,沒有Nvidia,沒有opencv 二、安裝依賴包 安裝protobuf,leveldb,snappy,OpenCV,hdf5, protob

Ubuntu16.04 PPA方式安裝JDK1.8

java6 app debian latest launchpad -h count cau update 一、刪除OpenJDK: sudo apt-get purge openjdk*    二、添加PPA: root@ubuntu:~#

ubuntu16.04系統mongodb安裝

3.4 安裝 local 官網下載 nbsp 執行文件 god tgz oca 官網下載 tar -zxvf mongodb-linux-x86_64-debian81-3.4.10.tgz.gz 移動或復制 sudo mv -r mongodb-linux-x86_64

Ubuntu16.04下同時安裝Anaconda2與Anaconda3

tps tools strong 安裝 a* 根據 tails environ 自動更新 轉自:http://blog.csdn.net/juezhanangle/article/details/78922888 由於編程時同時需要有python2/3的環境和大量的依賴包,

ubuntu16.04中supervisor安裝與使用(轉載)

cheng ubun shu 控制臺 super 占用 pre www. artisan ubuntu16.04中supervisor安裝與使用 supervisor 進程管理是可以讓進程在後臺運行,而不占用控制臺影響使用 1. 安裝 supervisor sudo a

VMware + ubuntu16.04 Linux 下安裝、配置Gogs

自己 不知道 advance bsp 空間 home apt-get gogs systemctl 本文在Win7+VMware的ubuntu 16.04中測試。運行如下命令: sudo apt-get install git sudo adduser git # 為Go

【轉】Win7 + Ubuntu16.04 雙系統安裝

hdd 免費 發現 bottom 處理 數據 掛載 練習 b- 【尊重原創】 http://blog.csdn.net/u012260238/article/details/52713546 整個安裝過程主要分為以下幾步: 一、 下載ubuntu16.04鏡像;

Ubuntu16.04 下如何安裝搜狗拼音輸入法【親測有效】

tor 有效 設置 添加 tro 如何 Go lin sta 一.添加fcitx鍵盤輸入法系統【系統默認是iBus】 1.將下載源添加至系統源: sudo add-apt-repository ppa:fcitx-team/nightly 2.更新系統列表獲得最新

Ubuntu16.04.4上安裝jdk

pro 不同 tro class 配置 1.8 port clas mage 在Ubuntu16.04.4上安裝jdk 一、安裝步驟 1.下載jdk安裝包 首先我們在oracle官網上下載jdk-8u161-linux-x64.tar.gz,當然也可以下載其

ubuntu16.04下g++安裝及使用

log 安裝 blog vim clas nbsp -- sudo su apt 1)首先在虛擬機中安裝Ubuntu16.04,網絡模式設置為NAT模式,安裝完成後在虛擬機中測試是否能夠上網。 2)進入Ubuntu,按Ctrl+alt+T,調出終端,輸入sudo su,輸

ubuntu16.04下hive安裝與配置

cep ted dir mave value usr ubunt java HA 下載 wget http://mirrors.hust.edu.cn/apache/hive/hive-2.3.2/apache-hive-2.3.2-bin.tar.gz 解壓到指定

ubuntu16.04 CUDA, CUDNN 安裝

1.8 ubuntu16 lib64 mod 安裝 arch linu 6.0 tar 這次介紹的是使用 tensorflow1.8, cuda9.0, cudnn7.0的版本 https://developer.nvidia.com/cuda-90-download-a

ubuntu16.04下docker安裝和簡單使用

purge 條件 service user amd rop pac pub bytes 前提條件 操作系統 docker-ce支持的ubuntu版本: Bionic 18.04 (LTS) Xenial 16.04 (LTS) Trusty 14.04 (LTS) 卸載

ubuntu16.04下TensorFlow安裝

ubuntu 16.04、Python 2.7 1、安裝pip sudo apt-get install python-pip python-dev 2、安裝TensorFlow sudo pip install --upgrade https://storage.googleapi

ubuntu16.04下go安裝

1、安裝go sudo apt-get install golang-go 2、設定go環境變數 export GOROOT=$HOME/go export PATH=$GOROOT/bin:$PATHU 3、新建一個檔案hello.go,在裡面寫入內容 package mai

ubuntu16.04 SVN的安裝與使用

1、直接安裝 # sudo apt-get install subversion 2、 建立版本庫 # sudo mkdir /home/svn # sudo mkdir /home/svn/repository # sudo chmod -R 777 /home/svn

機器視覺(一) : ubuntu16.04下ORBSLAM2安裝除錯

轉載:Ubuntu16.04+Ros+Usb攝像頭跑ORB SLAM2 又好久沒有碰部落格了,估計草都兩米高了,來鋤鋤草. - 2018.7.22 簡單列一下已有配置 Ubuntu 16.04 ROS Kinetic Opencv 3.4.1