PC接受手機(jī)投影DlnaMediaplayer是一款在電腦端接收手機(jī)投影并且可以選擇下載投影資源的軟件,同時(shí)該軟件將會(huì)調(diào)用N_m3u8DL-CLI和FFmpeg運(yùn)行,兩個(gè)exe必須放在和此軟件相同目錄!
配置說明
配置文件解釋,一般網(wǎng)站不需要除非訪問時(shí)需要定制refer或者user agent。
配置文件簡單解釋:DlnaMediaplayer.exe.config ,打開是xml文件,文本編輯器編輯。
可以定制refer和user_agent 格式區(qū)分大小寫:refer的value需要有紅色字樣。 agent不需要
<add key ="refer:http://124.14.12.189" value="Referer:https://www.xxxxxxxxx.com/xxxxxx/play/xxxxxx?spm_id_fro"/>
<add key ="user_agent:https://data.xxxx.xxxxx.com" value="NetType/3G"/>
需要修改下載器的,請(qǐng)改這個(gè)字段,修改完畢后,我的調(diào)用方式是 XXXX.exe后面跟 下載url作為參數(shù)。
<add key ="downloadexe" value="N_m3u8DL-CLI.exe"/>
比如
notepad.exe http://sqdownb.onlinedown.net/down/MetroStudio.rar.
下載器的refer或者user_agent需要自行配置。
開發(fā)說明
已知問題:
1:b站會(huì)員視頻不能投屏,原因是會(huì)員視頻不支持投屏,可以發(fā)現(xiàn)設(shè)備,但是即使是試看3分鐘的視頻也不發(fā)送url給投影端,所以這個(gè)沒辦法。
2:win7可能不能播放,需要看看啥問題
先說需求部分,最近我遇到一個(gè)個(gè)人需求,手機(jī)上買jd會(huì)員的時(shí)候,送了個(gè)xxx的視頻軟件會(huì)員,但是手機(jī)看片屏幕太小了,于是想投影到機(jī)頂盒上去,可是郁悶的是,
機(jī)頂盒距離我家wifi太遠(yuǎn),信號(hào)不好。于是想如何把這個(gè)可以在手機(jī)上看的視頻搞到電腦上看,或者可以下載下來。
于是乎開始分析,首先手機(jī)和機(jī)頂盒之間是采用DLNA進(jìn)行通信,我只要找到在PC上支持DLNA并且可以作為Media Renderer的視頻軟件就好了,可是找了幾個(gè)比如mediaplayer(這個(gè)最傻,不會(huì)緩沖,每次都只能看幾秒停幾秒),
KODI(這個(gè)其實(shí)挺不錯(cuò)的,但是都是只能在電腦上看,不能下載下來看)。其實(shí)仔細(xì)想想,可以在PC上播放了,為啥不能順便加個(gè)下載功能呢?
手閑的癢,就順便寫個(gè)軟件同時(shí)支持一下這兩個(gè)功能,結(jié)果沒想到一寫就寫的頭大,想吐出來。。。。。不過總算是有個(gè)樣子了。
其實(shí)也就是只要手機(jī)能播放的,并且支持投屏的,都應(yīng)該用這個(gè)軟件給拉下來,偷偷說一句,我用這個(gè)軟件下載速度極快,基本上帶寬可以跑滿。。。
更新已知問題:
6:某站播放時(shí)需要加refer,但是url是IP地址,程序無法判斷是需要添加refer的網(wǎng)站,需要配置文件?(to be done)
7:加個(gè)列表方便導(dǎo)出。
老規(guī)矩,先寫已知問題:
1:開始DLNA按鈕太丑,不說明基本上沒人知道在哪兒,點(diǎn)擊后沒有任何提示。
2:下載路徑無法配置
3:有時(shí)候會(huì)遇到無法連接的情況,這種情況我抓包看過,服務(wù)器返回的地址訪問就是502錯(cuò)誤,就算是加上refer , user agent也不行。 這個(gè)時(shí)候其他的投屏軟件也無法接受手機(jī)端的投屏。所以優(yōu)先級(jí)不是很高。
4:基本上遇到無法連接情況,大家把手機(jī)播放器和這個(gè)軟件都關(guān)掉,過幾分鐘再試試看。
5:播放后的URL會(huì)被播放器記住,但是一段時(shí)候后,URL會(huì)失效,這時(shí)候再點(diǎn)是沒用的。
此軟件將會(huì)調(diào)用N_m3u8DL-CLI 和FFmpeg運(yùn)行,其中這兩個(gè)exe必須放在和此軟件相同目錄。(反正就是壓縮包直接解壓就好了,找個(gè)英文路徑解壓安全點(diǎn)。)
軟件綠色,無需安裝,無廣告插件,本來可以加52pojie首發(fā)的,實(shí)在是太累了,下個(gè)版本(如果有人要的話)再加吧。
軟件壓縮后20MB,主要是avcodec-58.dll 這個(gè)貨是ffmpeg的庫,里面是各種解碼器,我自己的程序并不大。大家如果不放心,可以到ffmpeg網(wǎng)站上下載對(duì)應(yīng)的dll替換。
主要代碼邏輯如下:
1:在PC端開啟該軟件,偽裝成Media Renderer,往239.255.255.250發(fā)ddsp包,注冊(cè)成為AVTransport。
2:在手機(jī)端啟動(dòng)xxx客戶端,反正不局限于某客戶端,只要支持TV投影即可。 點(diǎn)擊投影按鈕,進(jìn)行DLNA查詢。
3:發(fā)現(xiàn)AVTransport設(shè)備,手機(jī)端作為controller發(fā)協(xié)議查詢?cè)O(shè)備能力,并且在SetAVTransportURI 命令中,發(fā)送m3u8信息。 也就是說其實(shí)不管在網(wǎng)頁端如何加密,最后這里都會(huì)發(fā)送一個(gè)可用的m3u8的地址過來。
4:該軟件得到m3u8信息后,請(qǐng)用戶選擇是播放還是下載。
5:播放采用的是ffmpeg解碼器進(jìn)行解碼播放。
6:下載m3u8部分采用的是論壇里面【開源M3U8下載器】N_m3u8DL-CLI @我是你老大, (感謝共享這么好用的軟件)因?yàn)檫@個(gè)解碼器可以傳遞參數(shù),還有界面,省的再寫了。呵呵。
其實(shí)總體思路并不難,這里記錄一下遇到的坑:
1:為了保證Upnp的兼容性,基本上市面上的開源庫都找了一遍,python的,java的,C++的,最后選用的是Platinum的開源庫,接口比較豐富,而且兼容性較好,實(shí)際測試基本上開啟后馬上就可以被手機(jī)端識(shí)別到設(shè)備。
2:FFMpeg的集成,遇到很多很多兼容性的問題,.net framework 和.net core的沖突,sdl效率問題等等,真是郁悶至極,最后沒辦法,現(xiàn)學(xué)的C#,用的是Unosquare.FFME,這個(gè)庫的好處是定制靈活,對(duì)外暴露的接口較多,集成方便,后續(xù)可以擴(kuò)展。
3:m3u8下載部分,N_m3u8DL-CLI還是挺好用的,主要是可以有命令行參數(shù),再次感謝一下。
請(qǐng)務(wù)必閱讀使用說明,
基本上運(yùn)行界面如下圖:
正?梢杂糜诒镜夭シ,如果想啟用DLNA,也就是接受投屏功能,請(qǐng)點(diǎn)擊下圖紅色部分按鈕,點(diǎn)擊后應(yīng)該啥反應(yīng)都沒有。就是啥反應(yīng)都沒有,你不放心可以再點(diǎn)一遍,其實(shí)后臺(tái)起了個(gè)線程去注冊(cè)AVTransport了。
然后開啟您的手機(jī),進(jìn)入投屏界面,應(yīng)該可以搜索到Platinum Media Renderer這個(gè)投屏設(shè)備,如果沒有,檢查PC防火墻等設(shè)置。(一般來說,能看到其他投影設(shè)備就應(yīng)該能看到這個(gè),除非防火墻擋住了)
點(diǎn)擊投屏,正常情況下應(yīng)該會(huì)出現(xiàn)這個(gè)界面。說明軟件捕獲到m3u8地址,這時(shí)需要盡快選擇到底是播放還是下載,兩者選一個(gè)。我用的是阻塞線程,如果超過3分鐘以上,URL有可能失效。
基于我寫的軟件一貫的難用的作風(fēng),這個(gè)軟件的下載地址也是沒有辦法選擇的,下載完畢也是沒有提示的,
但是你可以看到那個(gè)下載的命令行窗口消失的時(shí)候,要么就是下載完畢,要么就是下載失敗了。
下載后的軟件要到此軟件目錄下面的Downloads 目錄下面自己找。。。。
主要是寫的太累了,實(shí)在是不想改了。用的人多了就再更新吧。
補(bǔ)充一下,C#.net 在win10下測試過,其他軟件環(huán)境比如XP,WIn8沒有測試過,編譯選項(xiàng)是X86,應(yīng)該可用,但不能保證。
更新說明
1:修復(fù)b站不能觀看的問題,其實(shí)就是請(qǐng)求里面添加refer,但是因?yàn)槭荌P地址,所以我整了個(gè)配置文件,如果還不能看,就手動(dòng)改一下配置文件。關(guān)閉軟件重新打開就好了。@Thexxx,改好了,不過下載器你自己配置吧,找個(gè)支持http下載的可以配置refer的,我就不找了,嘿嘿。。。。
2:增加52pojie鏈接。
3:修改文件名稱,原來的太隨意了,修改為Dlna_media_player.修改DLNA設(shè)備名稱為Dlna_media_player。
4: 應(yīng)要求給程序增加一個(gè)圖標(biāo) @慕云輕,
5:本來想做下載列表的,看了看 太難了,畢竟剛學(xué)習(xí)C#兩天。。。我把下載程序改成配置文件配置,這樣大家可以定制下載程序。
6:開啟DLNA按鈕也換了個(gè)圖標(biāo)。好看一點(diǎn)。嘿嘿。