Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
qq_26386469
GSYVideoPlayer
提交
709f8858
G
GSYVideoPlayer
项目概览
qq_26386469
/
GSYVideoPlayer
与 Fork 源项目一致
从无法访问的项目Fork
通知
5
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
GSYVideoPlayer
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
709f8858
编写于
4月 25, 2018
作者:
S
shuyu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
更新弹幕demo
增加权限申请
上级
86a9fe01
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
152 addition
and
55 deletion
+152
-55
app/build.gradle
app/build.gradle
+8
-2
app/src/main/AndroidManifest.xml
app/src/main/AndroidManifest.xml
+5
-0
app/src/main/java/com/example/gsyvideoplayer/DanmkuVideoActivity.java
.../java/com/example/gsyvideoplayer/DanmkuVideoActivity.java
+4
-28
app/src/main/java/com/example/gsyvideoplayer/DetailControlActivity.java
...ava/com/example/gsyvideoplayer/DetailControlActivity.java
+53
-6
app/src/main/java/com/example/gsyvideoplayer/DetailFilterActivity.java
...java/com/example/gsyvideoplayer/DetailFilterActivity.java
+56
-5
app/src/main/java/com/example/gsyvideoplayer/video/DanmakuVideoPlayer.java
.../com/example/gsyvideoplayer/video/DanmakuVideoPlayer.java
+11
-8
dependencies.gradle
dependencies.gradle
+15
-6
未找到文件。
app/build.gradle
浏览文件 @
709f8858
...
...
@@ -66,8 +66,14 @@ dependencies {
implementation
project
(
':gsyVideoPlayer'
)
implementation
'com.squareup.okhttp3:okhttp:3.2.0'
implementation
'com.zhy:okhttputils:2.6.2'
implementation
dataDependencies
.
okhttpUtil
implementation
dataDependencies
.
okhttp
implementation
(
dataDependencies
.
permissionsdispatcher
)
{
// if you don't use android.app.Fragment you can exclude support for them
exclude
module:
"support-v13"
}
annotationProcessor
dataDependencies
.
permissionsdispatcherProcessor
//jcenter
//implementation "com.shuyu:GSYVideoPlayer:$gsyVideoVersion"
...
...
app/src/main/AndroidManifest.xml
浏览文件 @
709f8858
...
...
@@ -138,6 +138,11 @@
android:screenOrientation=
"portrait"
android:theme=
"@style/Theme.AppCompat.Translucent"
/>
<meta-data
android:name=
"android.max_aspect"
android:value=
"2.1"
/>
</application>
</manifest>
\ No newline at end of file
app/src/main/java/com/example/gsyvideoplayer/DanmkuVideoActivity.java
浏览文件 @
709f8858
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
;
...
...
@@ -18,17 +17,12 @@ import com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack;
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
;
...
...
@@ -200,6 +194,7 @@ public class DanmkuVideoActivity extends AppCompatActivity {
private
void
getDanmu
()
{
//下载demo然后设置
OkHttpUtils
.
get
().
url
(
TextUtils
.
concat
(
"http://xingyuyou.com/Public/app/barragefile/"
,
"608"
,
"barrage.txt"
).
toString
())
.
build
()
.
execute
(
new
FileCallBack
(
getApplication
().
getCacheDir
().
getAbsolutePath
(),
"barrage.txt"
)
//
...
...
@@ -210,27 +205,8 @@ public class DanmkuVideoActivity extends AppCompatActivity {
@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
());
if
(!
isDestory
)
{
((
DanmakuVideoPlayer
)
danmakuVideoPlayer
.
getCurrentPlayer
()).
setDanmaKuStream
(
response
);
}
}
...
...
app/src/main/java/com/example/gsyvideoplayer/DetailControlActivity.java
浏览文件 @
709f8858
package
com.example.gsyvideoplayer
;
import
android.Manifest
;
import
android.app.AlertDialog
;
import
android.content.DialogInterface
;
import
android.content.res.Configuration
;
import
android.graphics.Bitmap
;
import
android.os.Bundle
;
import
android.support.annotation.NonNull
;
import
android.support.v4.widget.NestedScrollView
;
import
android.view.View
;
import
android.widget.Button
;
...
...
@@ -35,6 +39,12 @@ import java.util.List;
import
butterknife.BindView
;
import
butterknife.ButterKnife
;
import
permissions.dispatcher.NeedsPermission
;
import
permissions.dispatcher.OnNeverAskAgain
;
import
permissions.dispatcher.OnPermissionDenied
;
import
permissions.dispatcher.OnShowRationale
;
import
permissions.dispatcher.PermissionRequest
;
import
permissions.dispatcher.RuntimePermissions
;
import
tv.danmaku.ijk.media.player.IjkMediaPlayer
;
/**
...
...
@@ -44,7 +54,7 @@ import tv.danmaku.ijk.media.player.IjkMediaPlayer;
* <p>
* Created by guoshuyu on 2017/6/18.
*/
@RuntimePermissions
public
class
DetailControlActivity
extends
GSYBaseActivityDetail
<
StandardGSYVideoPlayer
>
{
@BindView
(
R
.
id
.
post_detail_nested_scroll
)
...
...
@@ -134,7 +144,7 @@ public class DetailControlActivity extends GSYBaseActivityDetail<StandardGSYVide
shot
.
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
v
)
{
shotImage
(
v
);
DetailControlActivityPermissionsDispatcher
.
shotImageWithPermissionCheck
(
DetailControlActivity
.
this
,
v
);
}
});
...
...
@@ -142,7 +152,7 @@ public class DetailControlActivity extends GSYBaseActivityDetail<StandardGSYVide
startGif
.
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
v
)
{
startGif
(
);
DetailControlActivityPermissionsDispatcher
.
startGifWithPermissionCheck
(
DetailControlActivity
.
this
);
}
});
...
...
@@ -263,7 +273,8 @@ public class DetailControlActivity extends GSYBaseActivityDetail<StandardGSYVide
/**
* 开始gif截图
*/
private
void
startGif
()
{
@NeedsPermission
(
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
)
void
startGif
()
{
//开始缓存各个帧
mGifCreateHelper
.
startGif
(
new
File
(
FileUtils
.
getPath
()));
...
...
@@ -272,17 +283,46 @@ public class DetailControlActivity extends GSYBaseActivityDetail<StandardGSYVide
/**
* 生成gif
*/
private
void
stopGif
()
{
void
stopGif
()
{
loadingView
.
setVisibility
(
View
.
VISIBLE
);
mGifCreateHelper
.
stopGif
(
new
File
(
FileUtils
.
getPath
(),
"GSY-Z-"
+
System
.
currentTimeMillis
()
+
".gif"
));
}
@OnShowRationale
(
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
)
void
showRationaleForCamera
(
final
PermissionRequest
request
)
{
new
AlertDialog
.
Builder
(
this
)
.
setMessage
(
"快给我权限"
)
.
setPositiveButton
(
"允许"
,
new
DialogInterface
.
OnClickListener
()
{
@Override
public
void
onClick
(
DialogInterface
dialog
,
int
which
)
{
request
.
proceed
();
}
})
.
setNegativeButton
(
"拒绝"
,
new
DialogInterface
.
OnClickListener
()
{
@Override
public
void
onClick
(
DialogInterface
dialog
,
int
which
)
{
request
.
cancel
();
}
})
.
show
();
}
@OnPermissionDenied
(
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
)
void
showDeniedForCamera
()
{
Toast
.
makeText
(
this
,
"没有权限啊"
,
Toast
.
LENGTH_SHORT
).
show
();
}
@OnNeverAskAgain
(
Manifest
.
permission
.
CAMERA
)
void
showNeverAskForCamera
()
{
Toast
.
makeText
(
this
,
"再次授权"
,
Toast
.
LENGTH_SHORT
).
show
();
}
/**
* 视频截图
* 这里没有做读写本地sd卡的权限处理,记得实际使用要加上
*/
private
void
shotImage
(
final
View
v
)
{
@NeedsPermission
(
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
)
void
shotImage
(
final
View
v
)
{
//获取截图
detailPlayer
.
taskShotPic
(
new
GSYVideoShotListener
()
{
@Override
...
...
@@ -357,4 +397,11 @@ public class DetailControlActivity extends GSYBaseActivityDetail<StandardGSYVide
});
}
@Override
public
void
onRequestPermissionsResult
(
int
requestCode
,
@NonNull
String
[]
permissions
,
@NonNull
int
[]
grantResults
)
{
super
.
onRequestPermissionsResult
(
requestCode
,
permissions
,
grantResults
);
// NOTE: delegate the permission handling to generated method
DetailControlActivityPermissionsDispatcher
.
onRequestPermissionsResult
(
this
,
requestCode
,
grantResults
);
}
}
app/src/main/java/com/example/gsyvideoplayer/DetailFilterActivity.java
浏览文件 @
709f8858
package
com.example.gsyvideoplayer
;
import
android.Manifest
;
import
android.app.AlertDialog
;
import
android.content.DialogInterface
;
import
android.graphics.Bitmap
;
import
android.graphics.BitmapFactory
;
import
android.graphics.Color
;
import
android.opengl.Matrix
;
import
android.os.Bundle
;
import
android.support.annotation.NonNull
;
import
android.support.v4.widget.NestedScrollView
;
import
android.util.TypedValue
;
import
android.view.View
;
...
...
@@ -67,6 +71,12 @@ import java.util.TimerTask;
import
butterknife.BindView
;
import
butterknife.ButterKnife
;
import
permissions.dispatcher.NeedsPermission
;
import
permissions.dispatcher.OnNeverAskAgain
;
import
permissions.dispatcher.OnPermissionDenied
;
import
permissions.dispatcher.OnShowRationale
;
import
permissions.dispatcher.PermissionRequest
;
import
permissions.dispatcher.RuntimePermissions
;
/**
* 滤镜
...
...
@@ -74,7 +84,7 @@ import butterknife.ButterKnife;
* 或者参考DetailPlayer、DetailListPlayer实现
* Created by guoshuyu on 2017/6/18.
*/
@RuntimePermissions
public
class
DetailFilterActivity
extends
GSYBaseActivityDetail
<
StandardGSYVideoPlayer
>
{
@BindView
(
R
.
id
.
post_detail_nested_scroll
)
...
...
@@ -201,9 +211,11 @@ public class DetailFilterActivity extends GSYBaseActivityDetail<StandardGSYVideo
jump
.
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
v
)
{
shotImage
(
v
);
//
shotImage(v);
//JumpUtils.gotoControl(DetailFilterActivity.this);
//startActivity(new Intent(DetailControlActivity.this, MainActivity.class));
DetailFilterActivityPermissionsDispatcher
.
shotImageWithPermissionCheck
(
DetailFilterActivity
.
this
,
v
);
}
});
...
...
@@ -231,7 +243,7 @@ public class DetailFilterActivity extends GSYBaseActivityDetail<StandardGSYVideo
startGif
.
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
v
)
{
startGif
(
);
DetailFilterActivityPermissionsDispatcher
.
startGifWithPermissionCheck
(
DetailFilterActivity
.
this
);
}
});
...
...
@@ -298,7 +310,8 @@ public class DetailFilterActivity extends GSYBaseActivityDetail<StandardGSYVideo
/**
* 视频截图
*/
private
void
shotImage
(
final
View
v
)
{
@NeedsPermission
(
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
)
void
shotImage
(
final
View
v
)
{
//获取截图
detailPlayer
.
taskShotPic
(
new
GSYVideoShotListener
()
{
@Override
...
...
@@ -346,7 +359,8 @@ public class DetailFilterActivity extends GSYBaseActivityDetail<StandardGSYVideo
/**
* 开始gif截图
*/
private
void
startGif
()
{
@NeedsPermission
(
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
)
void
startGif
()
{
//开始缓存各个帧
mGifCreateHelper
.
startGif
(
new
File
(
FileUtils
.
getPath
()));
...
...
@@ -572,4 +586,41 @@ public class DetailFilterActivity extends GSYBaseActivityDetail<StandardGSYVideo
}
});
}
@OnShowRationale
(
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
)
void
showRationaleForCamera
(
final
PermissionRequest
request
)
{
new
AlertDialog
.
Builder
(
this
)
.
setMessage
(
"快给我权限"
)
.
setPositiveButton
(
"允许"
,
new
DialogInterface
.
OnClickListener
()
{
@Override
public
void
onClick
(
DialogInterface
dialog
,
int
which
)
{
request
.
proceed
();
}
})
.
setNegativeButton
(
"拒绝"
,
new
DialogInterface
.
OnClickListener
()
{
@Override
public
void
onClick
(
DialogInterface
dialog
,
int
which
)
{
request
.
cancel
();
}
})
.
show
();
}
@OnPermissionDenied
(
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
)
void
showDeniedForCamera
()
{
Toast
.
makeText
(
this
,
"没有权限啊"
,
Toast
.
LENGTH_SHORT
).
show
();
}
@OnNeverAskAgain
(
Manifest
.
permission
.
CAMERA
)
void
showNeverAskForCamera
()
{
Toast
.
makeText
(
this
,
"再次授权"
,
Toast
.
LENGTH_SHORT
).
show
();
}
@Override
public
void
onRequestPermissionsResult
(
int
requestCode
,
@NonNull
String
[]
permissions
,
@NonNull
int
[]
grantResults
)
{
super
.
onRequestPermissionsResult
(
requestCode
,
permissions
,
grantResults
);
// NOTE: delegate the permission handling to generated method
DetailFilterActivityPermissionsDispatcher
.
onRequestPermissionsResult
(
this
,
requestCode
,
grantResults
);
}
}
app/src/main/java/com/example/gsyvideoplayer/video/DanmakuVideoPlayer.java
浏览文件 @
709f8858
...
...
@@ -62,7 +62,7 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
private
boolean
mDanmaKuShow
=
true
;
private
File
m
Is
;
private
File
m
DumakuFile
;
public
DanmakuVideoPlayer
(
Context
context
,
Boolean
fullFlag
)
{
super
(
context
,
fullFlag
);
...
...
@@ -156,7 +156,7 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
@Override
protected
void
cloneParams
(
GSYBaseVideoPlayer
from
,
GSYBaseVideoPlayer
to
)
{
((
DanmakuVideoPlayer
)
to
).
m
Is
=
((
DanmakuVideoPlayer
)
from
).
mIs
;
((
DanmakuVideoPlayer
)
to
).
m
DumakuFile
=
((
DanmakuVideoPlayer
)
from
).
mDumakuFile
;
super
.
cloneParams
(
from
,
to
);
}
...
...
@@ -197,7 +197,7 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
}
public
void
setDanmaKuStream
(
File
is
)
{
m
Is
=
is
;
m
DumakuFile
=
is
;
if
(!
getDanmakuView
().
isPrepared
())
{
onPrepareDanmaku
((
DanmakuVideoPlayer
)
getCurrentPlayer
());
}
...
...
@@ -220,10 +220,13 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
.
setMaximumLines
(
maxLinesPair
)
.
preventOverlapping
(
overlappingEnablePair
);
if
(
mDanmakuView
!=
null
)
{
//todo 替换成你的数据流
if
(
mIs
!=
null
)
{
mParser
=
createParser
(
getIsStream
(
mIs
));
if
(
mDumakuFile
!=
null
)
{
mParser
=
createParser
(
getIsStream
(
mDumakuFile
));
}
//todo 这是为了demo效果,实际上需要去掉这个,外部传输文件进来
mParser
=
createParser
(
this
.
getResources
().
openRawResource
(
R
.
raw
.
comments
));
mDanmakuView
.
setCallback
(
new
master
.
flame
.
danmaku
.
controller
.
DrawHandler
.
Callback
()
{
@Override
public
void
updateTimer
(
DanmakuTimer
timer
)
{
...
...
@@ -363,8 +366,8 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
public
BaseDanmakuParser
getParser
()
{
if
(
mParser
==
null
)
{
if
(
m
Is
!=
null
)
{
mParser
=
createParser
(
getIsStream
(
m
Is
));
if
(
m
DumakuFile
!=
null
)
{
mParser
=
createParser
(
getIsStream
(
m
DumakuFile
));
}
}
return
mParser
;
...
...
dependencies.gradle
浏览文件 @
709f8858
...
...
@@ -6,11 +6,11 @@ allprojects {
ext
{
//Android
androidBuildToolsVersion
=
"2
6
.0.2"
androidBuildToolsVersion
=
"2
7
.0.2"
androidMinSdkVersion
=
16
androidTargetSdkVersion
=
2
6
androidCompileSdkVersion
=
2
6
supportLibraryVersion
=
'2
6
.0.2'
androidTargetSdkVersion
=
2
7
androidCompileSdkVersion
=
2
7
supportLibraryVersion
=
'2
7
.0.2'
//ViewLibraries
butterKnifeVersion
=
'8.2.1'
...
...
@@ -30,6 +30,11 @@ ext {
exo_player2
=
'2.6.1'
permissionsdispatcher
=
'3.2.0'
okhttp
=
'3.2.0'
okhttpUtil
=
'2.6.2'
androidDependencies
=
[
recyclerView:
"com.android.support:recyclerview-v7:${supportLibraryVersion}"
,
appcompat_v7:
"com.android.support:appcompat-v7:${supportLibraryVersion}"
,
...
...
@@ -63,7 +68,11 @@ ext {
]
dataDependencies
=
[
videocache:
"com.shuyu:gsyvideoplayer-androidvideocache:${gsyVideoVersion}"
,
leakcanary:
"com.squareup.leakcanary:leakcanary-android:${leakcanary}"
,
videocache
:
"com.shuyu:gsyvideoplayer-androidvideocache:${gsyVideoVersion}"
,
leakcanary
:
"com.squareup.leakcanary:leakcanary-android:${leakcanary}"
,
okhttpUtil
:
"com.squareup.okhttp3:okhttp:${okhttp}"
,
okhttp
:
"com.zhy:okhttputils:${okhttpUtil}"
,
permissionsdispatcher
:
"com.github.hotchemi:permissionsdispatcher:${permissionsdispatcher}"
,
permissionsdispatcherProcessor:
"com.github.hotchemi:permissionsdispatcher-processor:${permissionsdispatcher}"
,
]
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录