关于流媒体的简介及技术梳理

理解什么是流媒体

一种具备边传边播特点的多媒体,核心为流式传输技术,也被称为新的媒体传送方式。

不必等到把媒体全部下载完毕,只需要将视音频文件经过压缩处理, 放在媒体服务器上, 在网络中使用流式传输技术分段传送,大概几秒的延时就可以获取到媒体服务器推送的视频数据。

流媒体的出现节省了下载时间和存储空间, 使延时大大减少,极大地方便了人们的工作和生活。

 

示意图:

图片.png

   

举个例子:

视频直播的应用,某用户手机下载视频直播软件在推流端进行拍摄视频,利用推流协议然后在网上进行发布进入流媒体服务器,其他用户进入视频直播软件拉流端进行点播,利用拉流播放协议从流媒体服务器接收视频数据传输进行播放。

 

 

流媒体处理技术:

说说基于Pipeline结构的Gstreamer

Gstreamer是一个支持Windows,Linux,Android, iOS的跨平台的多媒体框架,应用程序可以通过管道(Pipeline)的方式,将多媒体处理的各个步骤串联起来,达到预期的效果。每个步骤通过元素(Element)基于GObject对象系统通过插件(plugins)的方式实现,方便了各项功能的扩展。

通过构建由元素组成的管道,GStreamer可用于实现各种多媒体应用程序,包括台式机播放器,音频/视频记录器,多媒体服务器,代码转换器等。元素是对多媒体流执行某些操作的对象,例如:

-读取文件

-在格式之间解码或编码

-从硬件设备捕获

-渲染到硬件设备

-混合或多路复用多个流元素

GStreamer的设计目标包括:

-快速处理大量数据

-允许完全多线程处理

-能够处理多种格式

-同步不同的数据流

-能够处理多个设备

存在不同类别的元素:

-源元素,这些元素不消耗数据,仅为管道提供数据。

-下沉元素,这些元素不产生数据,而是将数据呈现给输出设备。

-转换元素,这些元素将某种格式的输入流转换为另一种格式的流。编码器/解码器/转换器是示例。

-解复用器元素,这些元素解析流并产生几个输出流。

-混合器/混合器元素,将多个输入流合并为一个输出流。

(除此之外,还可以构造其他类别的元素。)

 

Bins ---- Bin是元素的子类,并充当其他元素的容器,因此可以将多个元素组合为一个元素。

管道是特殊的bin子类,提供以下功能作为其子类:

-为所有子类选择和管理全局时钟。

-根据所选时钟管理运行时间。Running_time是管道在PLAYING状态花费的经过时间,用于同步。

-管理管道中的延迟。

-提供让GstBus与应用程序通讯的元素的方法。

-管理元素的全局状态,例如错误和流结束。

通常,应用程序创建一个管道来管理应用程序中的所有元素

 

GStreamer支持两种可能的数据流类型,即推模型和拉模型。在推模型中,上游元素通过调用接收服务器上的方法将数据发送到下游元素。在拉模型中,下游元素通过调用来源服务器上的方法从上游元素请求数据。

 

Gstreamer使用出现的一些坑

系统:ubuntu18.04

安装gstreamer基本库,工具,以及插件

 

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

 

* 安装ffmpeg支持

 

sudo apt-get install gstreamer0.10-ffmpeg

 

* 测试(录制摄像头视频)

gst-launch autovideosrc ! ffmpegcolorspace ! autovideosink

 

唯一需要的其他“开发环境”是gcc编译器和文本编辑器。为了编译需要GStreamer并使用GStreamer核心库的代码,请记住将此字符串添加到gcc命令:

pkg-config --cflags --libs gstreamer-1.0

如果使用其他GStreamer库,例如视频库,必须在上面的字符串gstreamer-1.0之后添加额外的包(例如视频库的gstreamer-video-1.0)。

如果应用程序是在libtool的帮助下构建的,例如当使用automake / autoconf作为构建系统时,必须从gst-sdk-shell环境中运行configure脚本。

 

获取官方教程的源代码:

 

git clone https://gitlab.freedesktop.org/gstreamer/gst-docs

 

在每个教程的源代码的底部,需要找到该特定教程的命令,包括所需的库,按要求的顺序。在开发自己的应用程序时,GStreamer文档将说明函数所属的库。

 

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

 

运行:./basic-tutorial-1

 

如果遇到

Element = gst_element_factory_make("mad", "decoder");

Element为null,说明没安装mad插件,可以通过

gst-inspect mad

命令查看mad插件是否正常安装,如没有安装,在ubuntu下可以通过如下命令进行安装:

sudo apt-get install gstreamer0.10-plugins-ugly、


猜你喜欢

转载自blog.51cto.com/15024210/2680871