提交 471c9a77 编写于 作者: S shuyu

fix #1499

上级 84fc399c
......@@ -40,14 +40,14 @@ import master.flame.danmaku.danmaku.parser.IDataSource;
import master.flame.danmaku.ui.widget.DanmakuView;
/**
* Created by guoshuyu on 2017/2/16.
* <p>
* 配置弹幕使用的播放器,目前使用的是本地模拟数据。
* <p>
* 模拟数据的弹幕时常比较短,后面的时长点是没有数据的。
* <p>
* 注意:这只是一个例子,演示如何集合弹幕,需要完善如弹出输入弹幕等的,可以自行完善。
* 注意:b站的弹幕so只有v5 v7 x86、没有64,所以记得配置上ndk过滤。
Created by guoshuyu on 2017/2/16.
<p>
配置弹幕使用的播放器,目前使用的是本地模拟数据。
<p>
模拟数据的弹幕时常比较短,后面的时长点是没有数据的。
<p>
注意:这只是一个例子,演示如何集合弹幕,需要完善如弹出输入弹幕等的,可以自行完善。
注意:b站的弹幕so只有v5 v7 x86、没有64,所以记得配置上ndk过滤。
*/
public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
......@@ -107,19 +107,24 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
@Override
public void onVideoPause() {
super.onVideoPause();
if (mDanmakuView != null && mDanmakuView.isPrepared()) {
mDanmakuView.pause();
}
danmakuOnPause();
}
@Override
public void onVideoResume() {
super.onVideoResume();
if (mDanmakuView != null && mDanmakuView.isPrepared() && mDanmakuView.isPaused()) {
mDanmakuView.resume();
}
public void onVideoResume(boolean isResume) {
super.onVideoResume(isResume);
danmakuOnResume();
}
@Override
protected void clickStartIcon() {
super.clickStartIcon();
if (mCurrentState == CURRENT_STATE_PLAYING) {
danmakuOnResume();
} else if (mCurrentState == CURRENT_STATE_PAUSE) {
danmakuOnPause();
}
}
@Override
public void onCompletion() {
......@@ -156,13 +161,13 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
@Override
protected void cloneParams(GSYBaseVideoPlayer from, GSYBaseVideoPlayer to) {
((DanmakuVideoPlayer)to).mDumakuFile = ((DanmakuVideoPlayer)from).mDumakuFile;
((DanmakuVideoPlayer) to).mDumakuFile = ((DanmakuVideoPlayer) from).mDumakuFile;
super.cloneParams(from, to);
}
/**
* 处理播放器在全屏切换时,弹幕显示的逻辑
* 需要格外注意的是,因为全屏和小屏,是切换了播放器,所以需要同步之间的弹幕状态
处理播放器在全屏切换时,弹幕显示的逻辑
需要格外注意的是,因为全屏和小屏,是切换了播放器,所以需要同步之间的弹幕状态
*/
@Override
public GSYBaseVideoPlayer startWindowFullscreen(Context context, boolean actionBar, boolean statusBar) {
......@@ -178,8 +183,8 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
}
/**
* 处理播放器在退出全屏时,弹幕显示的逻辑
* 需要格外注意的是,因为全屏和小屏,是切换了播放器,所以需要同步之间的弹幕状态
处理播放器在退出全屏时,弹幕显示的逻辑
需要格外注意的是,因为全屏和小屏,是切换了播放器,所以需要同步之间的弹幕状态
*/
@Override
protected void resolveNormalVideoShow(View oldF, ViewGroup vp, GSYVideoPlayer gsyVideoPlayer) {
......@@ -196,10 +201,22 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
}
}
protected void danmakuOnPause() {
if (mDanmakuView != null && mDanmakuView.isPrepared()) {
mDanmakuView.pause();
}
}
protected void danmakuOnResume() {
if (mDanmakuView != null && mDanmakuView.isPrepared() && mDanmakuView.isPaused()) {
mDanmakuView.resume();
}
}
public void setDanmaKuStream(File is) {
mDumakuFile = is;
if(!getDanmakuView().isPrepared()) {
onPrepareDanmaku((DanmakuVideoPlayer)getCurrentPlayer());
if (!getDanmakuView().isPrepared()) {
onPrepareDanmaku((DanmakuVideoPlayer) getCurrentPlayer());
}
}
......@@ -220,7 +237,7 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
.setMaximumLines(maxLinesPair)
.preventOverlapping(overlappingEnablePair);
if (mDanmakuView != null) {
if(mDumakuFile != null) {
if (mDumakuFile != null) {
mParser = createParser(getIsStream(mDumakuFile));
}
......@@ -263,14 +280,14 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
InputStreamReader inputreader = new InputStreamReader(instream);
BufferedReader buffreader = new BufferedReader(inputreader);
String line;
StringBuilder sb1=new StringBuilder();
StringBuilder sb1 = new StringBuilder();
sb1.append("<i>");
//分行读取
while (( line = buffreader.readLine()) != null) {
while ((line = buffreader.readLine()) != null) {
sb1.append(line);
}
sb1.append("</i>");
Log.e("3333333",sb1.toString());
Log.e("3333333", sb1.toString());
instream.close();
return new ByteArrayInputStream(sb1.toString().getBytes());
} catch (java.io.FileNotFoundException e) {
......@@ -282,7 +299,7 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
}
/**
* 弹幕的显示与关闭
弹幕的显示与关闭
*/
private void resolveDanmakuShow() {
post(new Runnable() {
......@@ -303,7 +320,7 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
}
/**
* 开始播放弹幕
开始播放弹幕
*/
private void onPrepareDanmaku(DanmakuVideoPlayer gsyVideoPlayer) {
if (gsyVideoPlayer.getDanmakuView() != null && !gsyVideoPlayer.getDanmakuView().isPrepared() && gsyVideoPlayer.getParser() != null) {
......@@ -313,7 +330,7 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
}
/**
* 弹幕偏移
弹幕偏移
*/
private void resolveDanmakuSeek(DanmakuVideoPlayer gsyVideoPlayer, long time) {
if (mHadPlay && gsyVideoPlayer.getDanmakuView() != null && gsyVideoPlayer.getDanmakuView().isPrepared()) {
......@@ -322,10 +339,10 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
}
/**
* 创建解析器对象,解析输入流
*
* @param stream
* @return
创建解析器对象,解析输入流
@param stream
@return
*/
private BaseDanmakuParser createParser(InputStream stream) {
......@@ -354,7 +371,7 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
}
/**
* 释放弹幕控件
释放弹幕控件
*/
private void releaseDanmaku(DanmakuVideoPlayer danmakuVideoPlayer) {
if (danmakuVideoPlayer != null && danmakuVideoPlayer.getDanmakuView() != null) {
......@@ -364,7 +381,7 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
}
public BaseDanmakuParser getParser() {
if(mParser == null) {
if (mParser == null) {
if (mDumakuFile != null) {
mParser = createParser(getIsStream(mDumakuFile));
}
......@@ -397,7 +414,7 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
}
/**
* 模拟添加弹幕数据
模拟添加弹幕数据
*/
private void addDanmaku(boolean islive) {
BaseDanmaku danmaku = mDanmakuContext.mDanmakuFactory.createDanmaku(BaseDanmaku.TYPE_SCROLL_RL);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册