diff --git a/app/build.gradle b/app/build.gradle index ce3bb535d5bf0bfa8ff755a98c5090b7d8e23c7b..d26da2220d9827c0bedcb8fd6fc1ec0cffb3a503 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 971551bee2e6827d0d72cf68c8f621391d31ce23..c235ef37707d9e04be60c1962a722e5d954a6856 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 6edcb3c53e67adf9f353c4b96db81f4f63be4cd4..781b956e814035b0deac4455abfabdbca3e0f7d7 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; }