3

DLNA, PulseAudio

 2 years ago
source link: http://antkillerfarm.github.io/technology/2015/06/10/dlna.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

DLNA参考资料

http://pie.pconline.com.cn/443/4434846.html

So easy!电脑手机玩转DLNA Wifi音箱播放

这篇文章从用户的角度分析DLNA设备的使用方法。

http://en.wikipedia.org/wiki/List_of_UPnP_AV_media_servers_and_clients

这个网址提供了支持UPnP/DLNA的服务器和客户端的名单。

http://jorgenmodin.net/index_html/archive/2009/12/26/list-of-open-source-dlnaupnp-av-software-devices

这个网址主要针对Linux平台的UPnP/DLNA软件。

http://www.right.com.cn/forum/thread-115634-1-1.html

把TL-WR703N打造成真正的AirPlay播放器

http://www.right.com.cn/forum/forum.php?mod=viewthread&action=printable&tid=135975

在OpenWrt上折腾DLNA音频推送(Gmediarender)的总结

这两篇是如何向OpenWRT中添加DLNA、AirPlay功能的帖子。

DLNA各种设备角色的分析

设备角色的定义

DLNA体系结构最重要的一个概念就是设备角色(Device Category)。

以下对其中主要的角色做一个通俗的解释,至于准确的定义可查阅相关规范,这里就不赘述了。

  • Digital Media Server (DMS)。DMS就是存放多媒体数据的地方。

  • Digital Media Player (DMP)。DMP负责多媒体数据的解码。

  • Digital Media Renderer (DMR)。DMR负责多媒体数据的展示,比如显示图片、视频,输出音频等。

  • Digital Media Controller (DMC)。DMC负责媒体的播放控制,比如开始、停止、快进、快退等,相当于是个遥控器。

各种设备角色之间的交互

DLNA定义了两大类的交互。

  • 2-Box System

2-Box System

上图是一个典型的2-box应用。DMP播放DMS中的多媒体数据。这类应用其实和通常的流媒体播放差不多,即使不用DLNA,也可以用类似FTP、Samba之类的协议,分享DMS中的多媒体数据,因此还谈不上有多牛。

  • 3-Box System

3-Box System

上图是一个典型的3-box应用。DMR负责播放DMS的多媒体数据,但整个流程确是由DMC创建并控制的。举个通俗的例子就是,DMC相当于淘宝网,客户在网上下单,但淘宝网自己并没有商品,于是它将订单发给淘宝卖家(DMS),然后,DMS将商品交给快递(DMR),DMR最终将商品交到客户手中(将多媒体内容播放出来)。

2-Box System和3-Box System本身都是一大类的应用,上面图中展示的只是其中的典型个例。

设备能力模型

在DLNA刚推出的时候,设备功能还比较简单,采用设备角色模型运作的很好。但后来随着设备功能的完善,这个模型缺点也暴露无遗。

以音箱为例,作为一个标准的输出设备,它的角色应该是DMR。后来添加了各种音频处理的功能之后,也可以算是DMP。再后来,集成了外接USB存储设备,充当DMS似乎也是很自然的事。那么这个时候音箱的角色是什么呢?

针对这样的情况,DLNA的新标准引入了设备能力模型,简单的说就是在网络通知的时候,告诉其他设备,自己有哪些能力(也就是自己能充当哪些角色)。

还是以上面的音箱为例,进化后的音箱可以声称自己具备DMR+DMP+DMS的能力。

各种Android音频播放软件能力对比

只能将在线音乐推送到DMR,不能推送本地音乐,也不能点播DMS中的音乐。

可以推送在线音乐和本地音乐到DMR,但不能点播DMS中的音乐。

  • BubbleUPnP

功能最全,没有什么干不了的。推荐使用这个软件来调试设备的DLNA功能。

  • Onkyo Remote

貌似只能点播DMS+DMP中音乐,纯DMS的不行。换句话说它只是个DMC。

  • iMediaShare(又名Flipps)

全功能。由于本身不自带播放器,DMR/DMP需要借助其他的本地播放器来实现。这个是免费的,没有BubbleUPnP的同学,可以用这个代替。

  • UPnPlay

DMR+DMP+DMC。

各种服务端软件能力对比

  • Windows Media Player

功能齐全,没有什么干不了的。

  • ReadyMedia(又名MiniDLNA)

DMS。代码开源。

项目地址:

http://minidlna.sourceforge.net/

  • gmediarender

DMP+DMR。作为早期GNU项目的gmediarender,已经停止维护。2012年的时候,Henner Zeller为了将gmediarender移植到树莓派上,重新发起了该项目,并命名为gmrender-resurrect。Ubuntu等发行版所提供的gmediarender,已经改用gmrender-resurrect项目的代码。

gmrender-resurrect项目地址:

https://github.com/hzeller/gmrender-resurrect

  • ushare

DMS,该项目已经很久没有更新,不推荐使用。

  • Rygel

全功能。官网为:

https://wiki.gnome.org/Projects/Rygel

该项目用vala语言编写。Ubuntu中,可用以下命令安装环境:

sudo apt install valac

DLNA环境搭建

PC和手机都用Wifi连接到同一个无线路由器上。这一点很重要,目前的手机软件暂时还不能搜索到整个局域网里的所有DLNA设备。

Windows环境设置

由于Windows自带的Windows Media Player已经具备完整的DLNA功能,因此可以首先在Windows上设置环境,用于确认手机和网络的设置是否正常。并为后面的Linux环境设置,提供一个参考平台。

Windows环境设置步骤(以Windows 7为例):

1.控制面板—>网络和Internet—>网络和共享中心,设置当前网络为家庭或工作网络。

2.控制面板—>网络和Internet—>网络和共享中心->高级共享设置->媒体流选项,启用媒体流。

3.计算机->库,选中“音乐”,右键菜单->共享,设置相应的共享权限。

4.控制面板->网络和Internet->家庭组,选中“与设备共享媒体”。

5.打开Windows Media Player,顶部菜单->媒体流,选中“允许远程控制我的播放器”和“自动允许设备播放我的媒体”。

这几步都设好之后,打开BubbleUPnP,即可搜索到Media Player设备。

Linux环境设置(以Ubuntu为例)

这里的Linux环境可以用VirtualBox搭建。在设置网卡时,需要设置两块网卡,分别设置如下:

网卡1:WAN 桥接

网卡2:LAN NAT

由于Linux下现有的几个全功能开源库,对设备配置的要求比较高。这里打算采用两个轻量级的开源库分别实现DMS和DMR。

DMS:ReadyMedia

sudo apt install minidlna

2.修改minidlna配置

sudo gedit /etc/minidlna.conf

3.重启minidlna服务

sudo /etc/init.d/minidlna force-reload

DMR:gmediarender

sudo apt install gmediarender

这里需要注意的是,gmediarender是在Ubuntu 14.10中添加到源里的,不过该软件包在Ubuntu 14.04下亦可正常运行。因此,安装的时候只要修改软件源的配置即可。

2.启动服务

gmediarender -d

3.添加gstreamer插件

gmediarender仅提供UPNP服务,真正的媒体播放使用gstreamer来完成。

Openwrt上的DLNA编译过程

方案一:Rygel

这个方案可参见:

http://wiki.openwrt.org/doc/howto/rygel

http://patchwork.openwrt.org/

最近已经无法访问,因此该方案试了两天也没能弄出来,只好作罢了。

出现问题的原因在于Rygel是采用Vala语言编写的,需要有专门的Vala处理的脚本,而这个在标准的Openwrt中是没有的。

方案二:minidlna+gmediarender

1.minidlna

这个是目前官方支持的包。但是默认情况下,在Multimedia下并不可见。需要首先在Libraries下选择libffmpeg-mini或者libffmpeg-full,然后才能在Multimedia下看见。

此外配置方式和PC也略有不同:

1)配置文件在/etc/config/minidlna。相比PC版的配置,除了格式有所差异外,内容基本一致。唯一需要注意的是,其比PC版多了一个interface的配置项,需要将该项的内容改为在/etc/config/network中配置的lan的名称。

2)启动命令为:

/etc/init.d/minidlna enable

/etc/init.d/minidlna start

3)修改图标

图标数据在icons.c中。可用xxd命令转换png或者jpg文件为C的字节数组。

2.gmediarender

修改参见:

https://github.com/antkillerfarm/antkillerfarm_crazy/tree/master/openwrt_feeds

启动命令:

/etc/init.d/gmediarender start

Airplay

Airplay是Apple推出的媒体共享协议,可用Shairport包实现之。

Shairport是James Laird发起的开源项目,其官网是:

https://github.com/abrasive/shairport

Shairport基于Airplay v1协议,仅可用于推送音频流。(推送视频、图片需要用到Airplay v2协议)目前作者已经声明不再维护该项目。该项目比较好的分支有:

https://github.com/mikebrady/shairport-sync

这个分支添加了多设备音频流同步方面的内容。

http://raspberrypihq.com/how-to-turn-your-raspberry-pi-into-a-airplay-receiver-to-stream-music-from-your-iphone/

和DLNA、Airplay类似的协议还有Miracast和腾讯的QPlay,其中的QPlay基本山寨DLNA。

参考文献:

http://www.leiphone.com/news/201406/airplay-dlna-miracast.html

这篇文章介绍了DLNA、Airplay和Miracast等协议。

http://www.wi-fi.org/discover-wi-fi/wi-fi-certified-miracast

这是Miracast协议的官网。

DLNA的Android开发

目前来说,在Android中用到的UPNP框架基本为cyberlink框架和cling框架。这两个框架都是个人作品。

前者的作者是Satoshi Konno(个人主页:http://www.cybergarage.org/),一个45岁左右的日本资深码农,对云计算、物联网、3D图像、虚拟现实均有很深的造诣。

后者的作者是Christian Bauer(个人主页:http://4thline.org/)。

cyberlink框架代码参见:

https://github.com/CharonChui/CyberLink4Android

cling框架代码参见:

http://4thline.org/projects/cling

cling框架的demo程序wireme可参见:

code.google.com/p/wireme

参考文献:

http://blog.csdn.net/tkwxty/article/details/43342595

Android下DLNA开发简介

https://www.raspberrypi.org/forums/viewtopic.php?f=38&t=25684

Multi-room audio solution

PulseAudio

PulseAudio是一个介于ALSA和应用层之间的声音服务。和GStreamer的区别在于,后者是一个多媒体库,需要应用程序调用,才能运行,而前者直接可以运行。

它的官网:

https://www.freedesktop.org/wiki/Software/PulseAudio/

相关资料:

https://rootprompt.apatsch.net/2013/04/23/raspberry-pi-network-audio-player-pulseaudio-dlna-and-bluetooth-a2dp-part-3-bluetooth/

传统的无线话筒采用模拟信号传输,原理和收音机广播类似。其无线信号发送频段一般在FM、VHF和UHF上,总的趋势就是频率越来越高。目前主流的是UHF。

采用数字信号的无线话筒,其技术难点在于制定低延迟的音频传输协议。

http://www.ca001.com/thread-380980-1-1.html

这篇文章讲述了Dante网络音频传输协议。

http://www.studa.net/tongxin/091128/11441289.html

浅谈Dante数字音频传输技术。

https://www.audinate.com/

提出Dante协议的公司。

http://wenku.baidu.com/view/d0bcd929e2bd960590c67750.html

IEEE Ethernet AVB协议简介。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK