From aabfa204a5fa596e49f54a7c8da5f4fa4dd6f4fc Mon Sep 17 00:00:00 2001 From: guoshuyu Date: Fri, 13 Apr 2018 15:07:30 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AE=80=E5=8D=95=E5=AE=9E=E7=8E=B0=E5=BC=B9?= =?UTF-8?q?=E5=B9=95=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 4 ++ .../gsyvideoplayer/DanmkuVideoActivity.java | 57 +++++++++++++++++++ .../video/DanmakuVideoPlayer.java | 57 ++++++++++++++++++- 3 files changed, 116 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index ce3bb53..d26da22 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -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" diff --git a/app/src/main/java/com/example/gsyvideoplayer/DanmkuVideoActivity.java b/app/src/main/java/com/example/gsyvideoplayer/DanmkuVideoActivity.java index 971551b..c235ef3 100644 --- a/app/src/main/java/com/example/gsyvideoplayer/DanmkuVideoActivity.java +++ b/app/src/main/java/com/example/gsyvideoplayer/DanmkuVideoActivity.java @@ -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(""); + //分行读取 + while (( line = buffreader.readLine()) != null) { + sb1.append(line); + } + sb1.append(""); + 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); diff --git a/app/src/main/java/com/example/gsyvideoplayer/video/DanmakuVideoPlayer.java b/app/src/main/java/com/example/gsyvideoplayer/video/DanmakuVideoPlayer.java index 6edcb3c..781b956 100644 --- a/app/src/main/java/com/example/gsyvideoplayer/video/DanmakuVideoPlayer.java +++ b/app/src/main/java/com/example/gsyvideoplayer/video/DanmakuVideoPlayer.java @@ -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(""); + //分行读取 + while (( line = buffreader.readLine()) != null) { + sb1.append(line); + } + sb1.append(""); + 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; } -- GitLab