[已解決]ijkplayer無法播放b站視頻
在改進(jìn)小電視播放器(一個開源的手表端視頻播放器,用java編寫)的過程中,由于在部分手表上的兼容性問題,我想要將原本的MediaPlayer換為ijkplayer內(nèi)核,問題就此出現(xiàn)。
癥狀簡述:下載視頻再播放無問題。在線播放就會403拒絕訪問,播放器輸出錯誤碼"-10000,0",后經(jīng)測試只有b站視頻不能播放
(toast提示我加的)
(將鏈接直接用電腦瀏覽器打開,可以正常播放) 起初我以為是因為隨便找個app拆包取庫,人家沒編譯openssl導(dǎo)致不支持https,于是我耗費一坤周的時間自己學(xué)習(xí)編譯帶上了openssl,然而還是不行。 我開始懷疑是不是自己編譯出問題,于是找了原神官網(wǎng)一個背景視頻,https的,結(jié)果能播......更炸裂的是我換上之前拆別人包拆出來的庫,一樣能用(現(xiàn)在想想,正常網(wǎng)站哪個不是https......)好嘛,合著我半個月白干了,早知道先測試了TAT
總之現(xiàn)在我知道了,不是ijk問題。 然后我就蒙蔽了,我對網(wǎng)絡(luò)通信這方面差不多一無所知,于是我去問WearBili的作者XC。XC告訴我可能是我獲取鏈接時沒加"platform=html5",然而原作者早就加了。然后他讓我加headers試試看,仍然不行。所以系統(tǒng)自帶的MediaPlayer為啥能播?我不理解。
(這是請求鏈接的部分) 這時候正好原作者找我要這個修改版小電視最新版的代碼,于是我把這個大坑扔給了原作者看。 原作者倒是告訴我一個可能的問題原因:由于b站視頻鏈接太長,ijk接收到視頻地址后,咔嚓把".mp4"后面的參數(shù)啥的全給截了。我想了想確實有道理,我試過把mp4后面一長串刪掉再用瀏覽器打開,也是報403。 然而我抓包之后發(fā)現(xiàn)鏈接是完整的(不過我也看不出什么門道)
于是我們都沒轍了。
最終,我發(fā)現(xiàn)了請求里面有兩個UserAgent,一查才知道,ijkplayer自帶了一個UserAgent,將其用setOption改掉,即可正常播放!