提交 aabfa204 编写于 作者: G guoshuyu

简单实现弹幕获取

上级 77af0b89
......@@ -65,6 +65,10 @@ dependencies {
implementation androidDependencies.design
implementation project(':gsyVideoPlayer')
implementation 'com.squareup.okhttp3:okhttp:3.2.0'
implementation 'com.zhy:okhttputils:2.6.2'
//jcenter
//implementation "com.shuyu:GSYVideoPlayer:$gsyVideoVersion"
......
......@@ -3,8 +3,11 @@ package com.example.gsyvideoplayer;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.widget.NestedScrollView;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
......@@ -16,9 +19,20 @@ import com.shuyu.gsyvideoplayer.video.base.GSYVideoPlayer;
import com.shuyu.gsyvideoplayer.listener.LockClickListener;
import com.shuyu.gsyvideoplayer.utils.OrientationUtils;
import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer;
import com.zhy.http.okhttp.OkHttpUtils;
import com.zhy.http.okhttp.callback.FileCallBack;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import butterknife.BindView;
import butterknife.ButterKnife;
import okhttp3.Call;
/**
* Created by guoshuyu on 2017/2/19.
......@@ -39,6 +53,7 @@ public class DanmkuVideoActivity extends AppCompatActivity {
private boolean isPlay;
private boolean isPause;
private boolean isDestory;
private OrientationUtils orientationUtils;
......@@ -98,6 +113,7 @@ public class DanmkuVideoActivity extends AppCompatActivity {
//开始播放了才能旋转和全屏
orientationUtils.setEnable(true);
isPlay = true;
getDanmu();
}
@Override
......@@ -168,6 +184,8 @@ public class DanmkuVideoActivity extends AppCompatActivity {
//GSYPreViewManager.instance().releaseMediaPlayer();
if (orientationUtils != null)
orientationUtils.releaseListener();
isDestory = true;
}
......@@ -181,6 +199,45 @@ public class DanmkuVideoActivity extends AppCompatActivity {
}
private void getDanmu() {
OkHttpUtils.get().url(TextUtils.concat("http://xingyuyou.com/Public/app/barragefile/","608","barrage.txt").toString())
.build()
.execute(new FileCallBack(getApplication().getCacheDir().getAbsolutePath(), "barrage.txt")//
{
@Override
public void onError(Call call, Exception e, int id) {
}
@Override
public void onResponse(File response, int id) {
try {
InputStream instream = new FileInputStream(response);
InputStreamReader inputreader = new InputStreamReader(instream);
BufferedReader buffreader = new BufferedReader(inputreader);
String line;
StringBuilder sb1=new StringBuilder();
sb1.append("<i>");
//分行读取
while (( line = buffreader.readLine()) != null) {
sb1.append(line);
}
sb1.append("</i>");
Log.e("3333333",sb1.toString());
instream.close();
if(!isDestory) {
((DanmakuVideoPlayer)danmakuVideoPlayer.getCurrentPlayer()).setDanmaKuStream(response);
}
} catch (java.io.FileNotFoundException e) {
Log.d("TestFile", "The File doesn't not exist.");
} catch (IOException e) {
Log.d("TestFile", e.getMessage());
}
}
});
}
private void resolveNormalVideoUI() {
//增加title
danmakuVideoPlayer.getTitleTextView().setVisibility(View.GONE);
......
......@@ -3,6 +3,7 @@ package com.example.gsyvideoplayer.video;
import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
......@@ -15,7 +16,13 @@ import com.shuyu.gsyvideoplayer.utils.Debuger;
import com.shuyu.gsyvideoplayer.video.base.GSYBaseVideoPlayer;
import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import master.flame.danmaku.controller.IDanmakuView;
......@@ -55,6 +62,8 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
private boolean mDanmaKuShow = true;
private File mIs;
public DanmakuVideoPlayer(Context context, Boolean fullFlag) {
super(context, fullFlag);
}
......@@ -145,6 +154,12 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
}
}
@Override
protected void cloneParams(GSYBaseVideoPlayer from, GSYBaseVideoPlayer to) {
((DanmakuVideoPlayer)to).mIs = ((DanmakuVideoPlayer)from).mIs;
super.cloneParams(from, to);
}
/**
* 处理播放器在全屏切换时,弹幕显示的逻辑
* 需要格外注意的是,因为全屏和小屏,是切换了播放器,所以需要同步之间的弹幕状态
......@@ -181,6 +196,13 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
}
}
public void setDanmaKuStream(File is) {
mIs = is;
if(!getDanmakuView().isPrepared()) {
onPrepareDanmaku((DanmakuVideoPlayer)getCurrentPlayer());
}
}
private void initDanmaku() {
// 设置最大显示行数
......@@ -199,7 +221,9 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
.preventOverlapping(overlappingEnablePair);
if (mDanmakuView != null) {
//todo 替换成你的数据流
mParser = createParser(this.getResources().openRawResource(R.raw.comments));
if(mIs != null) {
mParser = createParser(getIsStream(mIs));
}
mDanmakuView.setCallback(new master.flame.danmaku.controller.DrawHandler.Callback() {
@Override
public void updateTimer(DanmakuTimer timer) {
......@@ -230,6 +254,30 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
}
}
private InputStream getIsStream(File file) {
try {
InputStream instream = new FileInputStream(file);
InputStreamReader inputreader = new InputStreamReader(instream);
BufferedReader buffreader = new BufferedReader(inputreader);
String line;
StringBuilder sb1=new StringBuilder();
sb1.append("<i>");
//分行读取
while (( line = buffreader.readLine()) != null) {
sb1.append(line);
}
sb1.append("</i>");
Log.e("3333333",sb1.toString());
instream.close();
return new ByteArrayInputStream(sb1.toString().getBytes());
} catch (java.io.FileNotFoundException e) {
Log.d("TestFile", "The File doesn't not exist.");
} catch (IOException e) {
Log.d("TestFile", e.getMessage());
}
return null;
}
/**
* 弹幕的显示与关闭
*/
......@@ -255,7 +303,7 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
* 开始播放弹幕
*/
private void onPrepareDanmaku(DanmakuVideoPlayer gsyVideoPlayer) {
if (gsyVideoPlayer.getDanmakuView() != null && !gsyVideoPlayer.getDanmakuView().isPrepared()) {
if (gsyVideoPlayer.getDanmakuView() != null && !gsyVideoPlayer.getDanmakuView().isPrepared() && gsyVideoPlayer.getParser() != null) {
gsyVideoPlayer.getDanmakuView().prepare(gsyVideoPlayer.getParser(),
gsyVideoPlayer.getDanmakuContext());
}
......@@ -314,6 +362,11 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
}
public BaseDanmakuParser getParser() {
if(mParser == null) {
if (mIs != null) {
mParser = createParser(getIsStream(mIs));
}
}
return mParser;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册