gstreamer学习与研究之一:介绍与软件安装

来源:互联网 发布:php 会计做账 编辑:程序博客网 时间:2024/06/08 04:52

1.gstreamer介绍

GStreamer是在Linux下创建流媒体的应用程序框架(流媒体:流媒体,就是能够实现网络边传边播放多媒体)。GStreamer不仅可以处理音频和视频,它可以处理任何一种类型的数据流。我认为它主要的功能就是辅助你进行音视频数据流的采集、处理、传输,播放等功能的工具软件。因此可以给予GStreamer构建音视频音乐播放器,同时进行录音录像、进行音视频传输等。
因为工作的关系,今年一直在用gstreamer做视频播放器相关的开发和工程应用。这个软件可以说是linux平台下应用最多的流媒体处理软件。在飞思卡尔的IMX6等平台上已经将其移植进去,因此做嵌入式相关的流媒体开发,gstreamer是最佳的选择之一。gstreamer本身也非常复杂,熟悉其框架结构需要花不少的时间。从本文开始,逐步分享我对gstreamer的理解和使用心得。
介绍的内容从gstreamer的安装开始,之后是自己对gstreamer官方示例、文档和概念的理解,之后是在IMX6Q使用gstreamer做开发的个人心得。

2.linux下安装gstreamer

gstreamer有一个官方的网站gstreamer官网,这无疑是学习gstreamer最权威的材料。本系列博客的大量内容是参考了该网站。
该网站也介绍了在windows、linux和Android、mac等主流操作系统下安装的方法。我使用的是Ubuntu linux,因此主要介绍该环境下的使用和安装方法。
首先使用 apt-get update 更新一下你的系统,这样可以避免很多奇奇怪怪的问题。
完成之后执行下面的命令:

apt-get install libgstreamer1.0-0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools

完成之后,将一个视频文件复制到linux系统中,例如放在/opt/video下面的位置;执行下面的命令测试是否安装成功。

 gst-play-1.0 /opt/video/0001.mp4

这里写图片描述

出现上述画面就代表你的环境搭建好了。

3.获得指导教程中的示例代码

gst本身提供了基础的学习指导,仔细学习有利于我们更好的掌握gstreamer,获得方法是在Linux下执行下面的命令:

git clone git://anongit.freedesktop.org/gstreamer/gst-docs

如果你而没有安装git,直接使用apt-get install git即可。
下载完成后,代码和文件在你的当前目录下。
运行第一个程序:
进入examples下的tutorial目录下,打开basic-tutorial-1.c文件,修改这一行,这里可以播放本地视频

 pipeline = gst_parse_launch ("playbin uri=file:///opt/video/0001.mp4", NULL);

然后执行下面的命令:

gcc basic-tutorial-1.c -o basic-tutorial-1 `pkg-config --cflags --libs gstreamer-1.0`

编译生成可执行程序basic-tutorial-1可执行程序,然后输入./basic-tutorial-1 来执行,此时同样可以看到上面的播放画面。这说明我们的安装是成功的。

4.basic-tutorial-1.c代码

#include <gst/gst.h>int main(int argc, char *argv[]) {  GstElement *pipeline;  GstBus *bus;  GstMessage *msg;  /* 1.Initialize GStreamer */  gst_init (&argc, &argv);  /*2. Build the pipeline */  pipeline = gst_parse_launch ("playbin uri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm", NULL);  /* 3.Start playing */  gst_element_set_state (pipeline, GST_STATE_PLAYING);  /*4. Wait until error or EOS */  bus = gst_element_get_bus (pipeline);  msg = gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE, GST_MESSAGE_ERROR | GST_MESSAGE_EOS);  /* 5.Free resources */  if (msg != NULL)    gst_message_unref (msg);  gst_object_unref (bus);  gst_element_set_state (pipeline, GST_STATE_NULL);  gst_object_unref (pipeline);  return 0;}

5.解析

5.1 gst-init()

gst_init (&argc, &argv);
初始化gstreamer,放在gstreamer程序的最前面,完成内部数据结构的初始化、对所有可用插件进行检测和执行输入的命令行选项。如果使用argc和argv来给gst_init传递参数,可以方便的使用gstreamer的标准命令行选项。

5.2 gst_parse_launch ()

gst_parse_launch()函数的使用代码为:

pipeline = gst_parse_launch ("playbin uri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm", NULL);

这里有两个关键点gst_parse_launch和palybin。
Gstreamer是一个处理多媒体流的框架。媒体从源下载到管道中(前者成为生成者,后者称为消费者),这期间要经过一系列中间元素来完成所有的任务。这些交互的元素称为“管道”。
在Gstreamer中,可以手工组装各个元素,但是如果比较简单,并且不需要复杂的特征时,可以直接使用gst-parse-launch()来完成。这一函数可以接收管道的文本表示信息,并将其转换为实际需要的管道。这功能非常方便,甚至单独封装了一个独立的工具gst-launch。
playbin
我们希望gst_parse_launch()为我们建立哪种管道呢?这就是我们要谈论的第二个问题:我们使用palybin来构建一个只有单个元素的管道。
playbin是一个特殊的元素,既可以作为发送端,也可以作为接收端,是一个完整的管道。事实上,它创建了播放媒体所需要的所有元素。它不允许控制手动管道所做的粒度,但是,它仍然提供了足够的定制来满足广泛的应用需求。这个例子中,我们仅仅将URI一个元素传递给了playbin,这里还可以使用http://或者file://URL等,比如在这个例子中,我们将上面的代码改成了本地播放的视频文件。

5.3 gst_element_set_state ()

gst_element_set_state (pipeline, GST_STATE_PLAYING);
用来设置播放的状态,例如播放/暂停等。

5.4 gst_element_get_bus ()

bus = gst_element_get_bus (pipeline);
gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE, GST_MESSAGE_ERROR | GST_MESSAGE_EOS);
这两行将一直等待,直到出现了错误或者到达流的终点。gst_element_get_bus()检索管道的总线,如果发生错误,或者到达流终点(EOS)gst_bus_timed_pop_filtered()将会阻塞,下一节重点介绍gstreamer相关概念。
从这里开始,GStreamer密切关注所有相关信息。如果到达流末尾或者错误发生,Gstreamer将尝试进行一些操作,例如关闭视频窗口或者关闭网络。可以通过键盘在命令行输入“Ctrl -C”来实现。
之后的都是执行清理和关闭工作的代码。

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 湄潭茶 湄潭旅游景点 湄潭考驾照 湄潭翠芽价格表 贵州湄潭房价 湄潭职高 湄潭辅导班 贵阳到湄潭 湄潭美容院 湄潭到遵义 湄潭翠芽功效 湄潭房产网 湄潭二手房 湄潭家政 湄潭看守所 湄潭婚庆 湄潭在线网 湄潭企业 湄潭泡温泉 湄潭翠芽批发 中国湄潭 湄潭翠片 湄潭沁园春茶叶 湄潭风光 湄潭教育 湄潭门户网 贵州遵义湄潭 湄潭攻略 湄潭汽车站 遵义到湄潭多少钱 湄潭自助餐 湄潭在哪 湄潭公园 湄潭茶叶网 贵州湄潭房产 湄潭茶乡 湄潭翠芽属于什么茶 遵义湄潭美食 湄潭 医院 湄潭大茶壶 贵州湄潭绿茶