GStreamer部署-Linux(ubuntu14.04)(已测试)

本文详细介绍了如何在Ubuntu 14.04上使用apt-get命令安装GStreamer及其相关插件,并提供了一个简单的MP3播放器示例代码。通过此指南,读者可以快速了解GStreamer的基本安装配置及应用。

GStreamer部署-Linux(ubuntu14.04)(已测试)

标签:GStreamer


  • 环境

    ubuntu14.04

  • apt-get 命令方式安装

    sudo apt-get install libgstreamer0.10-dev gstreamer-tools gstreamer0.10-tools gstreamer0.10-doc

    sudo apt-get install gstreamer0.10-plugins-base gstreamer0.10-plugins-good gstreamer0.10-plugins-ugly gstreamer0.10-plugins-bad gstreamer0.10-plugins-bad-multiverse

    apt-get install libgstreamer* // 该命令的目的是安装头文件;注意’*’

  • mp3播放器demo代码

    
    #include <gst/gst.h>
    
    
    #include <glib.h>
    
    
    //定义消息处理函数,
    static gboolean bus_call(GstBus *bus,GstMessage *msg,gpointer data)
    {
        GMainLoop *loop = (GMainLoop *) data;//这个是主循环的指针,在接受EOS消息时退出循环
        switch (GST_MESSAGE_TYPE(msg))
        {
            case GST_MESSAGE_EOS:
                g_print("End of stream\n");
                g_main_loop_quit(loop);
                break;
            case GST_MESSAGE_ERROR:
            {
               gchar *debug;
               GError *error;
               gst_message_parse_error(msg,&error,&debug);
               g_free(debug);
               g_printerr("ERROR:%s\n",error->message);
               g_error_free(error);
               g_main_loop_quit(loop);
    
                break;
            }
            default:
                 break;
        }
        return TRUE;
    }
    
    int main(int argc,char *argv[])
    {
        GMainLoop *loop;
        GstElement *pipeline,*source,*decoder,*sink;//定义组件
        GstBus *bus;
    
        gst_init(&argc,&argv);
        loop = g_main_loop_new(NULL,FALSE);//创建主循环,在执行 g_main_loop_run后正式开始循环
    
        if(argc != 2)
        {
            g_printerr("Usage:%s <mp3 filename>\n",argv[0]);
            return -1;
        }
        //创建管道和组件
        pipeline = gst_pipeline_new("audio-player");
        source = gst_element_factory_make("filesrc","file-source");
        decoder = gst_element_factory_make("mad","mad-decoder");
        sink = gst_element_factory_make("autoaudiosink","audio-output");
    
        if(!pipeline||!source||!decoder||!sink){
            g_printerr("One element could not be created.Exiting.\n");
            return -1;
        }
    
        //设置 source的location 参数。即 文件地址.
        g_object_set(G_OBJECT(source),"location",argv[1],NULL);
    
        //得到 管道的消息总线
        bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline));
    
       //添加消息监视器
        gst_bus_add_watch(bus,bus_call,loop);
        gst_object_unref(bus);
    
        //把组件添加到管道中.管道是一个特殊的组件,可以更好的让数据流动
        gst_bin_add_many(GST_BIN(pipeline),source,decoder,sink,NULL);
    
       //依次连接组件
       gst_element_link_many(source,decoder,sink,NULL);
    
       //开始播放
        gst_element_set_state(pipeline,GST_STATE_PLAYING);
        g_print("Running\n");
    
        //开始循环
        g_main_loop_run(loop);
        g_print("Returned,stopping playback\n");
        gst_element_set_state(pipeline,GST_STATE_NULL);
        gst_object_unref(GST_OBJECT(pipeline));
    
        return 0;
    }
  • 生成可执行文件

    上述代码保存在 test.c 文件中,之后执行下面的命令进行编译(网上很多其他的编译命令会报错):

    gcc -Wall test.c -o test $(pkg-config --cflags --libs gstreamer-0.10)

    之后,当前目录下会生成一个test的可执行文件。
    【补充】网上很多都是: gcc -Wall $(pkg-config --cflags --libs gstreamer-0.10) test.c -o test ,这样就会产生因为命令的先后顺序带来的错误。原因如下:

    对于C/C++编译而言,读取编译选项是按照从左到右的顺序执行的。那么当编译器遇到源文件的时候,就开始对源文件中用到的函数进行解析,找到相对应的函数的函数体或者说是实现。这个过程是按照先遇到不能解析的函数,然后在源文件选项后面的一些选项中寻找可能的函数体的信息,是这样的一个顺序进行的。那么我们可以发现对于错误的命令,由于包含函数体或者函数定义信息的编译选项出现在源文件之前,那么当编译器在源文件中遇到不能解析的函数时,在源文件之后的选项中寻找相关的信息,那么,就出现了编译错误,也就是无法找到相关的函数定义。

  • 执行

    ./test test.mp3

    执行该命令之后就可以播放对应的mp3文件了(其中的test.mp3文件是事先准备好的)。

aiec@RK3588:~$ dpkg -l | grep gstreamer ii gir1.2-gstreamer-1.0:arm64 1.20.3-0ubuntu1.1 arm64 GObject introspection data for the GStreamer library ii gstreamer1.0-alsa:arm64 1.20.1-1ubuntu0.4 arm64 GStreamer plugin for ALSA ii gstreamer1.0-clutter-3.0:arm64 3.0.27-2ubuntu1 arm64 Clutter PLugin for GStreamer 1.0 ii gstreamer1.0-gl:arm64 1.20.1-1ubuntu0.4 arm64 GStreamer plugins for GL ii gstreamer1.0-libav:arm64 1.20.3-0ubuntu1 arm64 ffmpeg plugin for GStreamer ii gstreamer1.0-packagekit 1.2.5-2ubuntu3 arm64 GStreamer plugin to install codecs using PackageKit ii gstreamer1.0-pipewire:arm64 0.3.48-1ubuntu3 arm64 GStreamer 1.0 plugin for the PipeWire multimedia server ii gstreamer1.0-plugins-bad:arm64 1.20.3-0ubuntu1.1 arm64 GStreamer plugins from the "bad" set ii gstreamer1.0-plugins-base:arm64 1.20.1-1ubuntu0.4 arm64 GStreamer plugins from the "base" set ii gstreamer1.0-plugins-base-apps 1.20.1-1ubuntu0.4 arm64 GStreamer helper programs from the "base" set ii gstreamer1.0-plugins-good:arm64 1.20.3-0ubuntu1.3 arm64 GStreamer plugins from the "good" set ii gstreamer1.0-plugins-ugly:arm64 1.20.1-1 arm64 GStreamer plugins from the "ugly" set ii gstreamer1.0-pulseaudio:arm64 1.20.3-0ubuntu1.3 arm64 GStreamer plugin for PulseAudio (transitional package) ii gstreamer1.0-rockchip1 1.14-4 arm64 The Gstreamer plugins for Rockchip platforms. ii gstreamer1.0-rockchip1-dbgsym 1.14-4 arm64 debug symbols for gstreamer1.0-rockchip1 ii gstreamer1.0-tools 1.20.3-0ubuntu1.1 arm64 Tools for use with GStreamer ii gstreamer1.0-x:arm64 1.20.1-1ubuntu0.4 arm64 GStreamer plugins for X11 and Pango ii libgstreamer-gl1.0-0:arm64 1.20.1-1ubuntu0.4 arm64 GStreamer GL libraries ii libgstreamer-plugins-bad1.0-0:arm64 1.20.3-0ubuntu1.1 arm64 GStreamer libraries from the "bad" set ii libgstreamer-plugins-base1.0-0:arm64 1.20.1-1ubuntu0.4 arm64 GStreamer libraries from the "base" set ii libgstreamer-plugins-good1.0-0:arm64 1.20.3-0ubuntu1.3 arm64 GStreamer development files for libraries from the "good" set ii libgstreamer1.0-0:arm64 1.20.3-0ubuntu1.1 arm64 Core GStreamer libraries and elements 如何查看该gstreamer库安装位置
最新发布
10-31
<think>我们被要求查找Ubuntu中已安装的gstreamer库的安装位置。根据之前的引用和讨论,我们知道GStreamerUbuntu中通常通过apt安装,它的库文件会放在系统的标准库路径下。 在Ubuntu系统中,库文件通常位于以下目录: - /usr/lib/ 或 /usr/lib/x86_64-linux-gnu/(对于64位系统)或 /usr/lib/aarch64-linux-gnu/(对于ARM64系统)等 - /usr/local/lib/(如果是手动编译安装) 由于我们是通过apt安装的,所以应该在/usr/lib/下的相应目录。 我们可以使用以下命令来查找: 1. 使用`dpkg -L`命令列出指定包安装的文件。但是我们需要知道具体的包名。 2. 使用`find`命令在特定目录下查找。 3. 使用`gst-inspect-1.0`工具来查看插件的路径(但主要是插件,不是所有库)。 根据引用[4]中提到的一个插件路径:`/usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstcoreelements.so`,我们可以推断库文件的一般位置。 不过,用户想知道的是“gstreamer库”的安装位置,这里指的是核心库(如libgstreamer-1.0.so)还是所有相关的库(包括插件)? 通常,核心库的位置我们可以通过以下方式查找: 方法1:使用dpkg查找 首先,确定我们安装了哪些gstreamer相关的包。我们可以查找包含libgstreamer的包: dpkg -l | grep libgstreamer 然后,选择一个核心包,例如libgstreamer1.0-0(这是运行时库),查看其安装的文件: dpkg -L libgstreamer1.0-0 方法2:使用pkg-config 通过pkg-config可以获取库的路径,因为gstreamer-1.0.pc文件会记录库的路径。但是pkg-config给出的是链接选项(如-L路径),我们可以查看这个pc文件的内容。 方法3:直接使用find命令查找 find /usr -name 'libgstreamer-1.0.so*' 考虑到用户可能没有安装所有包,我们选择最直接的方法:使用dpkg查找核心包的文件位置。 步骤: 1. 检查libgstreamer1.0-0包是否安装(这是基本的运行时库) 2. 使用dpkg -L列出该包的文件 另外,开发包(如libgstreamer1.0-dev)会安装头文件和静态库,如果需要查看开发包的安装位置,可以查询对应的开发包。 根据用户需求,我们关注的是库文件(动态库)的位置。 因此,我们给出如下指令: ### 查找核心库安装位置 #### 步骤1:确认已安装的核心包 ```bash # 检查核心库包是否安装 dpkg -l libgstreamer1.0-0 ``` 如果已安装,则继续。 #### 步骤2:列出核心库文件 ```bash # 列出libgstreamer1.0-0包安装的所有文件 dpkg -L libgstreamer1.0-0 ``` 通过这个命令,我们可以找到库文件(通常是.so文件)的位置。通常,动态库会安装在`/usr/lib/x86_64-linux-gnu/`(对于x86_64架构)或类似目录下。 #### 步骤3:查找其他相关库 如果需要查找其他GStreamer库(如插件库),可以使用类似的方法查询对应的包,例如: ```bash # 列出所有已安装的gstreamer相关包 dpkg -l | grep gstreamer # 然后选择一个包,如gstreamer1.0-plugins-base,再查看其文件 dpkg -L gstreamer1.0-plugins-base ``` #### 方法4:使用系统查找命令 如果不知道具体的包名,可以使用`find`命令在全系统查找: ```bash # 查找名为libgstreamer-1.0.so的文件(这是核心库) sudo find /usr -name "libgstreamer-1.0.so*" -type f ``` 注意:由于/usr目录需要管理员权限才能完全搜索,所以这里加了sudo。 ### 示例输出 假设我们运行`dpkg -L libgstreamer1.0-0`,部分输出可能包含: ``` /usr/lib/x86_64-linux-gnu/libgstreamer-1.0.so.0 /usr/lib/x86_64-linux-gnu/libgstreamer-1.0.so.0.1602.0 ``` ### 相关问题 1. 如何查看 GStreamer 插件的安装位置? 2. 如何设置 GStreamer 的插件路径? 3.Ubuntu 中如何卸载 GStreamer? 4. 如何编译时指定 GStreamer 库路径? 5. GStreamer 的配置文件位置在哪里? > 通过上述方法可以快速定位 GStreamer 库的安装位置,便于开发调试或环境配置[^1][^4]。 </think>### 在 Ubuntu 中查找 GStreamer 库安装位置的方法 #### 方法 1:使用 `dpkg` 查询核心库位置 ```bash # 查询核心库文件路径 dpkg -L libgstreamer1.0-0 | grep '\.so' # 示例输出: # /usr/lib/x86_64-linux-gnu/libgstreamer-1.0.so.0 # /usr/lib/x86_64-linux-gnu/libgstreamer-1.0.so.0.1602.0 ``` #### 方法 2:查找插件安装目录 ```bash # 查找所有 GStreamer 插件位置 find /usr -path '*/gstreamer-1.0/*.so' 2>/dev/null # 示例输出: # /usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstcoreelements.so # /usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstalsa.so ``` #### 方法 3:通过 `pkg-config` 获取开发库路径 ```bash # 获取开发库的头文件路径 pkg-config --variable=includedir gstreamer-1.0 # 获取开发库的链接路径 pkg-config --variable=libdir gstreamer-1.0 ``` #### 方法 4:检查特定插件位置(如引用[4]的 coreelements) ```bash # 查询特定插件的详细位置 gst-inspect-1.0 coreelements | grep Filename # 示例输出(如引用[4]所示): # Filename: /usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstcoreelements.so ``` #### 常见安装位置总结 1. **核心库文件**: - `/usr/lib/x86_64-linux-gnu/libgstreamer-1.0.so*` - `/usr/lib/aarch64-linux-gnu/libgstreamer-1.0.so*` (ARM架构) 2. **插件目录**: - `/usr/lib/x86_64-linux-gnu/gstreamer-1.0/` - `/usr/lib/aarch64-linux-gnu/gstreamer-1.0/` (ARM) 3. **开发文件**: - 头文件:`/usr/include/gstreamer-1.0/` - 库文件:`/usr/lib/x86_64-linux-gnu/pkgconfig/gstreamer-1.0.pc` > 注:具体路径可能因系统架构(x86_64/aarch64)和安装方式(APT/源码编译)有所不同[^4]。 ### 相关问题 1. 如何验证 GStreamer 库的版本与安装路径是否匹配? 2. 当系统中有多个 GStreamer 版本时,如何指定使用特定版本? 3. 如何将自定义 GStreamer 插件添加到系统搜索路径? 4. GStreamer 环境变量 `GST_PLUGIN_PATH` 的作用和配置方法是什么? 5. 如何安全地卸载特定 GStreamer 组件而不影响其他依赖? > 通过上述方法可精确定位 GStreamerUbuntu 中的安装位置,便于开发调试和依赖管理[^1][^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值