zoukankan      html  css  js  c++  java
  • 关于流媒体的简介及技术梳理

    理解什么是流媒体

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

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

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

     

    示意图:

       

    举个例子:

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

     

     

    流媒体处理技术:

    说说基于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、

  • 相关阅读:
    (暂时弃坑)(半成品)ACM数论之旅18---反演定理 第二回 Mobius反演(莫比乌斯反演)((づ ̄3 ̄)づ天才第一步,雀。。。。)
    ACM数论之旅17---反演定理 第一回 二项式反演(神说要有光 于是就有了光(´・ω・`))
    ACM数论之旅16---母函数(又名生成函数)(痛并快乐着(╭ ̄3 ̄)╭)
    (暂时弃坑)ACM数论之旅15---置换群与Polya定理(我把标题看成poi了,poipoipoi(*≧▽≦)ツ)
    ACM数论之旅14---抽屉原理,鸽巢原理,球盒原理(叫法不一又有什么关系呢╮(╯▽╰)╭)
    ACM数论之旅13---容斥原理(一切都是命运石之门的选择(=゚ω゚)ノ)
    ACM数论之旅12---康托展开((*゚▽゚*)装甲展开,主推进器启动,倒计时3,2,1......)
    还有哪些东西要写눈_눈
    ACM数论之旅11---浅谈指数与对数(长篇)(今天休息,不学太难的数论> 3<)
    ACM数论之旅10---大组合数-卢卡斯定理(在下卢卡斯,你是我的Master吗?(。-`ω´-) )
  • 原文地址:https://www.cnblogs.com/eflypro/p/14610747.html
Copyright © 2011-2022 走看看