兰陵の记事簿

Tech Otakus Save The World

兰陵

2017年6月25日

代码>

弹幕加成

之前在页面顶部加了个视频,总感觉少点什么原谅她,于是瞎折腾啦,加了个弹幕。

h5弹幕播放器有很多很棒的,比如DPlayerDanmuPlayerABPlayerHTML5ice-video等等。但是根据本站的情况,视频是直接写进去的,我不可能魔改播放器。这时我发现了DanmuPlayer的姊妹项目jQuery弹幕插件,这不是正好吗doge,感谢这个项目。

经过一番修改校正终于成了,虽然还有少许bug。可回到顶部后点击右下角的播放按钮进行播放,加号可发送弹幕。

弹幕稀薄我能怎么办,我也很绝望啊哭泣。于是我跑b站去扒一部分,不过是xml结构的,我需要进行转换。

我去查了下每个参数的含义

比如:<d p="58.994998931885,1,25,16711680,1485325868,1,ed933146,2897482644">半人半灵的庭师——魂魄妖梦</d>

p字段里,逗号作为分割符
第一个参数是弹幕出现的时间,以秒数为单位。
第二个参数是弹幕的模式1..3滚动弹幕,4底端弹幕,5顶端弹幕,6逆向弹幕,7精准定位,8高级弹幕
第三个参数是字号,12非常小,16特小,18小,25中,36大,45很大,64特别大
第四个参数是字体的颜色,以HTML颜色的十进制数为准
第五个参数是Unix格式的时间戳,基准时间为 1970-1-1 08:00:00
第六个参数是弹幕池,0普通池,1字幕池,2特殊池【目前特殊池为高级弹幕专用】
第七个参数是发送者的ID,用于“屏蔽此弹幕的发送者”功能
第八个参数是弹幕在弹幕数据库中rowID,用于“历史弹幕”功能

根据我的需要,进行了正则匹配,以下转换的结构适合jquery.danmu.js后端加载

<?php
//十进制转十六进制颜色码
function rgb($color) {
	return "#" . str_pad(dechex($color), 6, "0", STR_PAD_LEFT);
}
//字体大小
function size($size) {
	if ($size == 18) return 0;//小号字体
	if ($size == 25) return 1;//大号字体
}
//弹幕位置
function position($position) {
	if ($position < 4) return 0;//滚动弹幕
	if ($position == 4) return 2;//底端弹幕
	if ($position == 5) return 1;//顶端弹幕
}
//$danmaku[1]时间
//$danmaku[2]位置
//$danmaku[3]字号
//$danmaku[4]颜色
//$danmaku[6]内容
function preg_danmu($danmu) {
	$preg = '/<d p=\"(.*?),([1-5]),(18|25),(.*?),(.*?)\">(.*?)<\/d>/i';
	preg_match_all($preg, $danmu, $danmaku);
	$str = "";
	for ($i = 0;$i < count($danmaku[0]);$i++) {
		$str.= '\'{"text":"' . str_replace(array('"', '\''), array('\\"', '\\\''), $danmaku[6][$i]) . '","color":"' . rgb($danmaku[4][$i]) . '","size":"' . size($danmaku[3][$i]) . '","position":"' . position($danmaku[2][$i]) . '","time":"' . intval($danmaku[1][$i] * 10) . '"}\',';
	}
	return $str;
}
$xml = file_get_contents('badapple.xml');
echo preg_danmu($xml);
?>

就酱,弹幕刷起来~

#一言#

来一发吐槽

Title - Artist
0:00