日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DLNA, PulseAudio, diffpatch, bash

發布時間:2023/12/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DLNA, PulseAudio, diffpatch, bash 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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。

總結

以上是生活随笔為你收集整理的DLNA, PulseAudio, diffpatch, bash的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。