目标

本教程展示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. FTP与HTTP上传文件的对比

    许多站点,比如facebook或一些博客等都允许用户上传或下载文件,比如论坛或博客系统的图片. 在这种情况下,通常有两种选择上传文件到服务器,那就是FTP协议和HTTP协议. 以下列出了一些两者的不同 ...

  2. Js验证正则表达式

    //验证是否手机 var base = Objcet();base.isPhone = function(num) { var preg = /^1[3-7,8]{1}[0-9]{9}$/; retu ...

  3. [matlab工具箱] 神经网络Neural Net

    //目的是学习在BP神经网络的基础上添加遗传算法,蚁群算法等优化算法来优化网络,这是后话. 先简单了解了MATLAB中的神经网络工具箱,工具箱功能还是非常强大的,已经可以拟合出非常多的曲线来分析了. ...

  4. 机器学习---用python实现感知机算法和口袋算法(Machine Learning PLA Pocket Algorithm Application)

    之前在<机器学习---感知机(Machine Learning Perceptron)>一文中介绍了感知机算法的理论知识,现在让我们来实践一下. 有两个数据文件:data1和data2,分 ...

  5. 发现Mathematica中求逆出错

    发现Mathematica中应用Inverse求逆时出错.

  6. BAT 定时将多个本地文件同步到共享目录

    copy.bat 具体执行脚本,需要修改共享目录访问用户名,密码,同步的文件类型 list.txt   前面为本地文件夹,后面为共享目录,中间以”,”进行分割 附件地址: https://files. ...

  7. localstorage和cookie的设置方法和获取方法

    1.设置localStorage window.localStorage.setItem(vm.mobileSelf,JSON.stringify(contactInfo)); vm.mobileSe ...

  8. Linux 文件与目录的权限

    文件默认权限:umask umask就是指定“目前用户在新建文件或目录时候的权限默认值”.查询umask有以下两种方式: 目录与文件的默认权限是不一样的: - 文件,默认没有可执行(x)权限,只有r. ...

  9. linux安装phantomjs,-bash: /usr/local/bin/phantomjs: is a directory解决方案

    首先安装依赖——fontconfig和freetypeyum install fontconfig freetype2在官网上下载对应版本的包http://phantomjs.org/download ...

  10. R scholar和rentrez | NCBI和Google scholar文献数据挖掘

    主要会用到两个R包: rentrez: 'Entrez' in Rscholar: Analyse Citation Data from Google Scholar RISmed 包可以查询 Pub ...