目标

本教程展示GStreamer是如何进行数字音频传输的。

介绍

在常见的模拟格式外,高端的音频系统通常都接受数字格式,压缩的非压缩的都能接受。因为音频信号是从电脑传到音箱,用一种更有弹性的形态会更能保证质量。

典型的连接是通过S/PDIF线缆,可以是光缆或者同轴电缆。

在这种情况下,GStreamer是不需要做音频的解码的,可以运行在pass-through模式下,简单的输出编码后的数据,让外接的音频系统进行解码。

GStreamer音频sink的内部实现

首先,在系统层级必须支持数字音频的输出。实现这点需要操作系统的支持,但通常有一个音频控制面板,然后有个“Digital
Audio Output”的选项。

对每个平台的GStreamer的音频sink(Linux下的pulsesink,OS
X下的osxaudiosink,Windows下的directsoundsink),可以检测数字音频输出是否可用以及根据接收到的编码后的数据来调整cap。比如,这些element通常是接收audio/x-raw-int或者audio/x-raw-float数据,当数字音频输出打开的时候,他们可以接收audio/mpeg、audio/x-ac3、audio/x-eac3以及audio/x-dts。

那么,当playbin2在建立解码pipeline时,它会发现音频sink可以直接和编码后的数据相连,这样就需要一个音频解码器了。这个过程是自动完成的,并不需要应用介入。

在Linux上,还存在其他的音频sink,比如:alsasink的工作就不一样。

数据格式的预警

当系统层打开了数字音频输出功能后,无论在S/PDIF线缆后面的实际音频解码器是否支持这些格式,GStreamer的音频sink会自动列出所有的数字音频Cap。这样做的原因有两个,一个是没法获得一个外接的解码器支持的格式,另一个是线缆的连接可能会脱落(并非永远可靠)。

比如,我们在系统的音频控制面板里面打开了数字音频输出,directsoundsink会在audio/x-raw-int之外自动显示audio/x-ac3、audio/x-eac3和audio/x-dts,但是一个外接的解码器可能只能接受原始流。

要解决这个问题需要最终用户的介入,因为只有最终用户才能知道外接的解码器能支持什么格式的数据。

在一些系统里面,最简单的方法就是告诉操作系统外接的音频解码器能接受的格式。这样的话,GStreamer的音频sink只需要提供这些格式的cap就可以了。这些可以接受的音频格式通常都是在操作系统的音频配置面板上选择的,数字音频输出也是在这里打开。但是,并非所有的音频驱动都支持这样做。

另一个解决方案是使用包含一个capsfilter element和一个audio sink的客制化的sink bin。这样外接解码器支持的格式就可以在caps filter上过滤,保证不符合的都过滤掉。这样应用就不再依赖用户对系统的配置,虽然还是需要用户的介入,但不再需要考虑音频驱动是否提供选择项了。

请注意,不要使用autoaudiosink这个音频sink,因为它只支持raw数据,会忽略所有压缩过的格式。

【GStreamer开发】GStreamer播放教程09——数字音频传输的更多相关文章

  1. 【GStreamer开发】GStreamer播放教程06——可视化音频

    目标 GStreamer有一系列把音频转换成视频的element.他们可以用于科学的目的或者增加音乐播放器的趣味性.本教程展示: 如何允许音频的可视化 如何选择可视化element 介绍 在playb ...

  2. 【GStreamer开发】GStreamer基础教程16——平台相关的element

    目标 虽然GStreamer是跨平台的framework,但不是所有的element都是在所有平台下都有的.比如,音频和视频的sink都非常依赖于当前的window系统,根据当前的平台需要选择不同的e ...

  3. gstreamer应用开发(播放器)之旅

    GStreamer开发,主要分为两块:应用开发.插件开发. 插件开发人员,通常是编解码库的作者(做出了编解码库后,希望gstreamer能用起来这个库,因此增加这个适配层).芯片原厂人员(将自家的hw ...

  4. 安装gstreamer开发环境

    ubuntu中安装gstreamer开发环境: * 安装gstreamer基本库,工具,以及插件 sudo apt--dev gstreamer-tools gstreamer0.-tools gst ...

  5. 【转】一步一步教你在Ubuntu12.04搭建gstreamer开发环境

    原文网址:http://blog.csdn.net/xsl1990/article/details/8333062 闲得蛋疼    无聊寂寞冷    随便写写弄弄 看到网上蛮多搭建gstreamer开 ...

  6. Python开发的入门教程(一)-数据类型、变量

    介绍 Python第一门课程,是Python开发的入门教程,将介绍Python语言的特点和适用范围,Python基本的数据类型,条件判断和循环,函数,以及Python特有的切片和列表生成式. Pyth ...

  7. Apple Watch开发快速入门教程

     Apple Watch开发快速入门教程  试读下载地址:http://pan.baidu.com/s/1eQ8JdR0 介绍:苹果为Watch提供全新的开发框架WatchKit.本教程是国内第一本A ...

  8. 开发快平台(M302I小e开发板系列教程)

    开发快平台(M302I小e开发板系列教程) 开发块平台ESP8266模块相关理解 一. M302I小e开发板源码注释,源码基于:v1.4.0.8-u34.zip 1. user_main.c /*** ...

  9. C#开发Unity游戏教程循环遍历做出判断及Unity游戏示例

    C#开发Unity游戏教程循环遍历做出判断及Unity游戏示例 Unity中循环遍历每个数据,并做出判断 很多时候,游戏在玩家做出判断以后,游戏程序会遍历玩家身上大量的所需数据,然后做出判断,即首先判 ...

随机推荐

  1. C程序的函数说明使用和特点说明第一节

    一.函数的特点: 全部都是全部函数构成 面向过程的:是函数式语言 函数的调用 是按需调用 封装包含 二.程序中函数的作用: 可以使用函数使程序变的简短 和 清晰 提高代码重用性 提高开发效率 有利于程 ...

  2. 洛谷 P1191 矩形 题解

    P1191 矩形 题目描述 给出一个 \(n \times n\)的矩阵,矩阵中,有些格子被染成白色,有些格子被染成黑色,现要求矩阵中白色矩形的数量 输入格式 第一行,一个整数\(n\),表示矩形的大 ...

  3. Django系列目录

    一:搭建自己的博客系列  搭建自己的博客(一):前期准备  搭建自己的博客(二):创建表,创建超级用户  搭建自己的博客(三):简单搭建首页和详情页 搭建自己的博客(四):优化首页和详情页 搭建自己的 ...

  4. 1090 Highest Price in Supply Chain (25)(25 分)

    A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyone invo ...

  5. [golang]golang如何覆盖输出console,实现进度条;golang一个骚气的进度提示库

    [golang]golang如何覆盖输出console,实现进度条 package main import( "fmt" "os" "time&quo ...

  6. VMware 桥接网络设置

    1. 桥接的基本原理 桥接是将虚拟机和宿主机在局域网中的地位看成是一样的,逻辑如下: 但实际上是通过如下图实现的:(该图来自http://blog.csdn.net/qingfengtsing/art ...

  7. 大数据学习之路之Hadoop

    Hadoop介绍 一.简介 Hadoop是一个开源的分布式计算平台,用于存储大数据,并使用MapReduce来处理.Hadoop擅长于存储各种格式的庞大的数据,任意的格式甚至非结构化的处理.两个核心: ...

  8. 查看 systemctl 崩溃日志 及 运行日志

    vi /var/log/syslog 查看指定服务的: grep "bx" /var/log/syslog

  9. Sqlmap全参数详解

    sqlmap全参数详解 sqlmap是在sql注入中非常常用的一款工具,由于其开源性,适合从个人到企业,从学习到实战,各领域各阶段的应用,我们还可以将它改造成我们自己独有的渗透利器.这款工具中,大大小 ...

  10. Mac 终端显示git分支

    1 进入你的home目录 cd ~ 2 编辑.bashrc文件 vi .bashrc 3 将下面的代码加入到文件的最后处 function git_branch { branch="`git ...