DLNA, PulseAudio, diffpatch, bash

article/2025/9/28 23:34:08

http://antkillerfarm.github.io/

参考资料

http://www.miui.com/thread-647727-1-1.html

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

这两篇文章从用户的角度分析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

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

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

http://mayecn.com/blog/2013/04/23/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应用。DMP播放DMS中的多媒体数据。这类应用其实和通常的流媒体播放差不多,即使不用DLNA,也可以用类似FTP、Samba之类的协议,分享DMS中的多媒体数据,因此还谈不上有多牛。

  • 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音频播放软件能力对比

  • QQ音乐

只能将在线音乐推送到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-get 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

1.安装

sudo apt-get install minidlna

2.修改minidlna配置

sudo gedit /etc/minidlna.conf

3.重启minidlna服务

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

DMR:gmediarender

1.安装

sudo apt-get 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

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

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协议简介。

diff&patch

diff/patch这对工具在数学上来说,diff是对2个集合求差,patch是求和。

{% highlight bash %}
diff -uNr A B > C #生成A和B的diff文件C,-uNr为最常用的选项
patch A C #给A打上diff文件得到B
patch -R B C #B还原为A
{% endhighlight %}

批量patch

给目录应用patch。

patch -p1 <1.patch

这种情况适合1.patch中包含对多个文件的修改时。

批量应用patch

有的时候,patch不是一个patch文件,而是一个目录中的若干个patch文件。这时可用如下办法:

find . -name "*.patch">1.txt

sort 1.txt | xargs cat >2.patch

patch -p1 <2.patch

bash

查看当前使用的shell

实时查看:

ps | grep $$ | awk '{print $4}'

非实时查看:

echo $SHELL

return和exit的区别

return用于函数的返回,它只能用在函数中。

exit用于整个shell脚本的退出。

预定义变量

$?: 上条命令的返回值

$$: 当前shell的PID。


http://chatgpt.dhexx.cn/article/Q1DDknJm.shtml

相关文章

Cling源码解析

项目地址&#xff1a;cling&#xff0c;分析的版本&#xff1a;5fd60eb&#xff0c;Demo 地址&#xff1a;BeyondUPnP 1 功能介绍 1.1 Cling Cling类库是由java实现的DLNA/UPnP协议栈。基于DLNA/UPnP可以开发出类似多屏互动、资源共享、远程控制等功能的应用&#xff0c;通过…

树莓派python蓝牙_在树莓派3B上做蓝牙音频

无损播放器无线音频方案设计 1. 音频流程简介 暂缺。 2. 关键库和应用简介 2.1 pulseaudio 2.2 bluez 2.3 gstreamer 3. 无线音频方案实施方案 3.1 主要参考材料 3.2 树莓派和R16方案设计 ( 工具&#xff0c;具体位置在&#xff1a;tina/staging_dir/toolchain-arm_c…

cantata测试工具_我如何构建和维护开源音乐播放器Cantata

cantata测试工具 这是与开发和维护开源音乐播放器的开发人员进行的一系列对话的第三部分。 Craig Drummond是Cantata的开发者和维护者&#xff0c; Cantata是一种开源音乐播放器&#xff0c;充当Music Player Daemon&#xff08;MPD&#xff09;音乐服务器的前端&#xff08;客…

sd卡烧写linux内核,linux下怎样烧写sd卡

广告 提供包含云服务器,云在内的50+款云计算产品。打造一站式的云产品试用服务,助力开发者和企业零门槛上云。 就像用硬盘装windows平台一样,将sd启动卡插入板子的sd卡插槽,然后将启动顺序拨码开关拨到sd卡启动处,开机启动即可手动把sd卡中加装好的平台烧写到板子上...如下…

linux下实现dlna识别当前音频格式,如何将实时音频流设置为DLNA兼容设备?

问题描述 有没有办法将声卡的实时输出从我们的12.04.1 LTS amd64桌面流式传输到我们网络中的DLNA-compliant外部设备&#xff1f;使用Rygel&#xff0c;miniDLNA和uShare选择共享目录中的媒体内容总是很好 – 但到目前为止&#xff0c;我们完全无法通过DLNA向客户端获取实时音频…

IOS版aplayer使用教程_享声数播APP使用指南【ios版】

享声数播的内容播放是支持APP操作的,现在我们简单介绍一下相关的操作指南。 关于享声APP,官方推荐安卓手机用户使用bubbleupnp ,苹果ios用户使用8player 举例设备:享声A1 软件:8player 操作顺序 【数播端操作】 ①享声数播用网线连接到路由器 ②在享声主屏幕上切换到【通用…

打开方式中选择默认方式无反映_「全民标签」论享声A1的APP打开方式以及与树莓派的使用对比...

​ 大家好&#xff0c;我是流氓才子。 说在前面&#xff1a;今天的推送&#xff0c;末尾没有福利&#xff0c;因为个人觉得文章的主角就是最大的福利。。。先别急着说这句广告很硬&#xff0c;往下翻翻试试&#xff1f; 近一个月来论坛最火的机器是啥&#xff1f;没猜错的话应该…

Android上好用的DLNA播放器BubbleUPnP

BubbleUPnP的厉害之处在于&#xff1a;实现在手机上听电脑上的歌&#xff0c;或者控制电脑上的播放器当遥控器用。用foobar2000只需要添加一个叫foo_upnp的插件即可&#xff0c;XMBC或者别的支持UPNP的播放器也可以。 BubbleUPnP播放器能够轻松播放手机中的音视频及网络上的UPn…

BubbleUPnP多屏互动

一&#xff0c;相关简介 1、 DLAN简介&#xff08;百度百科&#xff09; DLNA的全称是DIGITAL LIVING NETWORK ALLIANCE&#xff0c;其宗旨是Enjoy your music, photos and videos, anywhere anytime&#xff0c; DLNA(Digital Living Network Alliance)由索尼、英特尔、微软等…

WebDAV之葫芦儿·派盘+BubbleUPnP

BubbleUPnP 支持WebDAV方式连接葫芦儿派盘。 推荐一款投屏神器,它将手机内容分享到电视大屏上与家人好友一起共享,软件还提供了丰富的音乐及影视资源,喜欢的内容在线搜索就能播放。支持连接葫芦儿派盘WebDAV服务站,可以直接播放派盘内的影视资源。 BubbleUPnP是一款支持U…

数据结构和算法——Huffman树和Huffman编码

Huffman树是一种特殊结构的二叉树&#xff0c;由Huffman树设计的二进制前缀编码&#xff0c;也称为Huffman编码在通信领域有着广泛的应用。在word2vec模型中&#xff0c;在构建层次Softmax的过程中&#xff0c;也使用到了Huffman树的知识。 在通信中&#xff0c;需要将传输的文…

Huffman编码压缩文件

文章目录 前言一、Huffman编码是什么&#xff1f;二、Huffman编码的实现方法三、Huffman压缩文件1.统计文件个字符出现的次数2.生成Huffman树3.生成码表4.对文件进行压缩 四、Huffman解压文件五、实验结果总结 前言 这个实验是我在学习信息论与编码时所做的课程实验&#xff0…

自适应Huffman编码

自适应Huffman编码&#xff0c;可用初始编码表&#xff08;数字音视频技术&#xff0c;实验二&#xff09; 如果你已经理解了 自适应Huffman编码 &#xff0c;那么你不应该浪费时间在无聊的实验上 实验目的 1、深入掌握自适应Huffman编码的原理 2、掌握自适应Huffman编码算法…

huffman python,哈夫曼(Huffman)编码python代码实现

首先看定义 哈夫曼编码(Huffman Coding)&#xff0c;又称霍夫曼编码&#xff0c;是一种编码方式&#xff0c;哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法&#xff0c;该方法完全依据字符出现概率来构造异字头的平均长度最短的码字&#xff0c;有时称…

Huffman Tree

Huffman Tree 哈夫曼树&#xff1b;哈夫曼编码&#xff1b;最优二叉树 自底向上 变长编码&#xff1b;前缀编码&#xff1b;熵编码 数据无损压缩&#xff1b;最短编码&#xff1b;最佳判定树 一、基本概念 Huffman Tree&#xff0c;又称最优二叉树&#xff0c;是带权路径长度最…

Huffman Codes

题目 In 1953, David A. Huffman published his paper “A Method for the Construction of Minimum-Redundancy Codes”,and hence printed his name in the history of computer science. As a professor who gives the final exam problem on Huffman codes, I am encounte…

HuffmanTree

#include "stdafx.h" #include "stdio.h" #include "stdlib.h" #include "string.h"typedef int ELEMTYPE;//哈弗曼树节点结构体 typedef struct HuffmanTree {ELEMTYPE weight;ELEMTYPE id;//区分权值相同的节点struct HuffmanTree* …

JPEG中Huffman解码实例讲解

DHT Huffuman表格式 -------------------------------------------------------------------------- 名称 字节数 值 说明 -------------------------------------------------------------------------- 段标识 1 FF 段类型 1 C4 段…

哈夫曼树(huffman)

学完了huffman树&#xff0c;讲一下自己对它的理解 huffman树遵循二叉树的原则&#xff0c;每个节点最多有两个子节点&#xff0c;但是每个节点都带有一个权重&#xff0c;如果我们要将一组字符串 “ B D C A F E ” 插入huffman树&#xff0c;每个字符都会带有一个权重&#…

Huffman树和Huffman编码

文章目录 Huffman树的定义带权路径长度WPL Huffman树的构造Huffman树的特点 Huffman编码构造Huffman编码 Huffman树的定义 哈夫曼&#xff08;Huffman&#xff09;树&#xff0c;又称最优二叉树&#xff0c;是一类带权路径长度WPL最短的树。 带权路径长度WPL 要理解带权路径…