B站的DanmakuFlameMaster的使用

2021-07-16 05:27:44 字數 2484 閱讀 5165

1、彈幕內容解析

danmakuloade***ctory.create(danmakuloade***ctory.tag_bili) //xml解析

danmakuloade***ctory.create(danmakuloade***ctory.tag_acfun) //json檔案格式解析

2、初始化

(1)彈幕view

danmakuglobalconfig.default.setdanmakustyle(danmakuglobalconfig.danmaku_style_stroken, 3)

.setduplicatemergingenabled(false) //是否合併重複彈幕

.setmaximumvisiblesizeinscreen(80) //同屏最大顯示數量(彈幕密度(只對滾動有效))

.setcachestuffer(new backgroundcachestuffer());

if (mdanmakuview != null) catch (ioexception e)

mdanmakuview.setcallback(new callback()

@override

public void prepared()

});mdanmakuview.prepare(mparser);

mdanmakuview.showfps(true);//是否顯示fps

mdanmakuview.enabledanmakudrawingcache(false); //true在模擬器上執行有問題

private basedanmakuparser createparser(inputstream stream) };

}(2)內容解析

iloader loader = danmakuloade***ctory.create(danmakuloade***ctory.tag_bili);

try catch (illegaldataexception e)

basedanmakuparser parser = new bilidanmukuparser();

idatasource<?> datasource = loader.getdatasource();

parser.load(datasource);

return parser; }

(3)彈幕背景和邊距

private static class backgroundcachestuffer extends spannedcachestuffer

@override

public void drawbackground(basedanmaku danmaku, canvas canvas, float left, float top)

@override

public void drawstroke(basedanmaku danmaku, string linetext, canvas canvas, float left, float top, paint paint) }

3、新增彈幕(注意start和during的值)

//將彈幕加入佇列進行顯示

private void adddanmaku(boolean islive, long start, long during, string data)

// for(int i=0;i<100;i++)

danmaku.text = data;

danmaku.padding = 5;

danmaku.priority = 1; //0時會被過濾掉

danmaku.islive = islive;

danmaku.time = mdanmakuview.getcurrenttime() + start; //時間start的值不要太小

danmaku.duration = new duration(during); //顯示時間

//為了讓彈幕能夠完全顯示,during不能超過danmakufactory.max_danmaku_duration,否則顯示未到達螢幕邊界就消失

* 2); //滾動速度係數,越小越快

danmaku.textsize = 25f * (mparser.getdisplayer().getdensity() - 0.6f);

danmaku.textcolor = color.white;

danmaku.textshadowcolor = color.white;

// danmaku.underlinecolor = color.green;

danmaku.bordercolor = 0; //邊框

mdanmakuview.adddanmaku(danmaku); }

注意:繪製執行緒當沒有內容繪製時將wait休眠一段時間,導致部分彈幕顯示起始點不是螢幕邊界,為了讓加入的彈幕能夠從邊界開始顯示,加入彈幕前後加入以下**

mdanmakuview.pause(); mdanmakuview.resume();

B站彈幕姬

接上篇 下面開始分析彈幕資訊 當我們在完成和伺服器的握手之後,b站的彈幕伺服器就會開始不停的開始給我們推送相關房間的彈幕訊息了。老規矩前面16個位元組是這個包的相關資訊,我們先來看下這條訊息的前面16位元組在說什麼。00 00 01 38 頭部四位元組表達資料大小這可以看到是312位元組。00 10...

B站 搭建框架

上個視屏,演示了如何寫乙個hello world 的json格式的介面 json格式 fastjson基本知識點 如上所示,是你從上個視屏必須掌握的東西,否則很難繼續下去 p2 b站視屏 主要需求 注意 規範輸入輸出,都是以json格式傳輸的.並且有統一的格式 mysql write 介面 mysq...

爬取B站彈幕

最近幾天學習爬蟲,便爬取了b站的彈幕,本篇博文記錄的是爬取彈幕的方法一,近期會更新方法二。下面是流程 點開這個包是這個形式的 這裡面就有明文的彈幕,但通過requests獲得的response是經過utf 8編碼加密過的,想要獲得彈幕內容還要解密。下面附 from bs4 import beauti...