Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
ac13
GSYVideoPlayer
提交
23356a23
G
GSYVideoPlayer
项目概览
ac13
/
GSYVideoPlayer
与 Fork 源项目一致
从无法访问的项目Fork
通知
7
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 搜索 >>
提交
23356a23
编写于
9月 01, 2019
作者:
S
shuyu
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'origin/master'
# Conflicts: # gsyVideoPlayer/build.gradle
上级
c9bd6299
e2a90d17
变更
32
隐藏空白更改
内联
并排
Showing
32 changed file
with
978 addition
and
72 deletion
+978
-72
app/src/main/AndroidManifest.xml
app/src/main/AndroidManifest.xml
+50
-36
app/src/main/java/com/example/gsyvideoplayer/DetailADPlayer.java
.../main/java/com/example/gsyvideoplayer/DetailADPlayer.java
+2
-2
app/src/main/java/com/example/gsyvideoplayer/DetailADPlayer2.java
...main/java/com/example/gsyvideoplayer/DetailADPlayer2.java
+3
-2
app/src/main/java/com/example/gsyvideoplayer/DetailListPlayer.java
...ain/java/com/example/gsyvideoplayer/DetailListPlayer.java
+1
-1
app/src/main/java/com/example/gsyvideoplayer/DetailNormalActivityPlayer.java
...om/example/gsyvideoplayer/DetailNormalActivityPlayer.java
+228
-0
app/src/main/java/com/example/gsyvideoplayer/DetailPlayer.java
...rc/main/java/com/example/gsyvideoplayer/DetailPlayer.java
+12
-0
app/src/main/java/com/example/gsyvideoplayer/GSYApplication.java
.../main/java/com/example/gsyvideoplayer/GSYApplication.java
+1
-0
app/src/main/java/com/example/gsyvideoplayer/ListADVideoActivity.java
.../java/com/example/gsyvideoplayer/ListADVideoActivity.java
+1
-1
app/src/main/java/com/example/gsyvideoplayer/ListADVideoActivity2.java
...java/com/example/gsyvideoplayer/ListADVideoActivity2.java
+1
-1
app/src/main/java/com/example/gsyvideoplayer/ListVideoActivity.java
...in/java/com/example/gsyvideoplayer/ListVideoActivity.java
+2
-0
app/src/main/java/com/example/gsyvideoplayer/MainActivity.java
...rc/main/java/com/example/gsyvideoplayer/MainActivity.java
+7
-1
app/src/main/java/com/example/gsyvideoplayer/RecyclerView3Activity.java
...ava/com/example/gsyvideoplayer/RecyclerView3Activity.java
+205
-0
app/src/main/java/com/example/gsyvideoplayer/adapter/ListNormalAdapter.java
...com/example/gsyvideoplayer/adapter/ListNormalAdapter.java
+1
-1
app/src/main/java/com/example/gsyvideoplayer/exo/DetailExoListPlayer.java
...a/com/example/gsyvideoplayer/exo/DetailExoListPlayer.java
+1
-1
app/src/main/java/com/example/gsyvideoplayer/holder/RecyclerItemViewHolder.java
...example/gsyvideoplayer/holder/RecyclerItemViewHolder.java
+1
-1
app/src/main/java/com/example/gsyvideoplayer/mediacodec/MediaCodecRenderView.java
...ample/gsyvideoplayer/mediacodec/MediaCodecRenderView.java
+24
-0
app/src/main/java/com/example/gsyvideoplayer/mediacodec/MediaCodecTextureView.java
...mple/gsyvideoplayer/mediacodec/MediaCodecTextureView.java
+292
-0
app/src/main/java/com/example/gsyvideoplayer/mediacodec/MediaCodecVideo.java
...om/example/gsyvideoplayer/mediacodec/MediaCodecVideo.java
+51
-0
app/src/main/java/com/example/gsyvideoplayer/simple/SimpleDetailActivityMode1.java
...mple/gsyvideoplayer/simple/SimpleDetailActivityMode1.java
+1
-1
app/src/main/java/com/example/gsyvideoplayer/simple/SimpleDetailActivityMode2.java
...mple/gsyvideoplayer/simple/SimpleDetailActivityMode2.java
+1
-1
app/src/main/java/com/example/gsyvideoplayer/simple/adapter/SimpleListVideoModeAdapter.java
...ideoplayer/simple/adapter/SimpleListVideoModeAdapter.java
+1
-1
app/src/main/java/com/example/gsyvideoplayer/switchplay/SwitchListVideoAdapter.java
...ple/gsyvideoplayer/switchplay/SwitchListVideoAdapter.java
+1
-1
app/src/main/java/com/example/gsyvideoplayer/utils/JumpUtils.java
...main/java/com/example/gsyvideoplayer/utils/JumpUtils.java
+24
-0
app/src/main/java/com/example/gsyvideoplayer/video/RequestListADVideoPlayer.java
...xample/gsyvideoplayer/video/RequestListADVideoPlayer.java
+2
-2
app/src/main/res/layout/activity_main.xml
app/src/main/res/layout/activity_main.xml
+15
-0
app/src/main/res/xml/network_security_config.xml
app/src/main/res/xml/network_security_config.xml
+4
-0
doc/QUESTION.md
doc/QUESTION.md
+5
-2
gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/GSYBaseADActivityDetail.java
...ava/com/shuyu/gsyvideoplayer/GSYBaseADActivityDetail.java
+1
-0
gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/render/view/GSYTextureView.java
.../com/shuyu/gsyvideoplayer/render/view/GSYTextureView.java
+13
-4
gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/utils/CommonUtil.java
.../main/java/com/shuyu/gsyvideoplayer/utils/CommonUtil.java
+8
-0
gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/video/base/GSYBaseVideoPlayer.java
...m/shuyu/gsyvideoplayer/video/base/GSYBaseVideoPlayer.java
+13
-7
gsyVideoPlayer/build.gradle
gsyVideoPlayer/build.gradle
+6
-6
未找到文件。
app/src/main/AndroidManifest.xml
浏览文件 @
23356a23
...
...
@@ -18,10 +18,12 @@
android:icon=
"@mipmap/ic_launcher"
android:label=
"@string/app_name"
android:supportsRtl=
"true"
android:usesCleartextTraffic=
"true"
android:networkSecurityConfig=
"@xml/network_security_config"
android:theme=
"@style/AppTheme"
>
<activity
android:name=
".MainActivity"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
>
<intent-filter>
<action
android:name=
"android.intent.action.MAIN"
/>
...
...
@@ -31,166 +33,178 @@
</activity>
<activity
android:name=
".PlayActivity"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
android:theme=
"@style/Theme.AppCompat.Translucent"
/>
<activity
android:name=
".ListVideoActivity"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
android:theme=
"@style/Theme.AppCompat.Translucent"
/>
<activity
android:name=
".ListVideo2Activity"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
android:theme=
"@style/Theme.AppCompat.Translucent"
/>
<activity
android:name=
".DetailPlayer"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".RecyclerView2Activity"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".DetailListPlayer"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".WebDetailActivity"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".RecyclerViewActivity"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".DanmkuVideoActivity"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".FragmentVideoActivity"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".DetailMoreTypeActivity"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".InputUrlDetailActivity"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".PlayEmptyControlActivity"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".DetailControlActivity"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".DetailFilterActivity"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".PlayPickActivity"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".AutoPlayRecyclerViewActivity"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".ScrollingActivity"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:label=
"@string/title_activity_scrolling"
android:screenOrientation=
"portrait"
android:theme=
"@style/AppTheme.NoActionBar"
/>
<activity
android:name=
".WindowActivity"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".EmptyActivity"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".utils.floatUtil.FloatActivity"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".DetailADPlayer"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".DetailADPlayer2"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".ListMultiVideoActivity"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
android:theme=
"@style/Theme.AppCompat.Translucent"
/>
<activity
android:name=
".ListADVideoActivity"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
android:theme=
"@style/Theme.AppCompat.Translucent"
/>
<activity
android:name=
".ListADVideoActivity2"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
android:theme=
"@style/Theme.AppCompat.Translucent"
/>
<activity
android:name=
".exo.DetailExoListPlayer"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".simple.SimplePlayer"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:theme=
"@style/Theme.AppCompat.Full"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".simple.SimpleDetailActivityMode1"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".simple.SimpleDetailActivityMode2"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".simple.SimpleListVideoActivityMode1"
android:theme=
"@style/Theme.AppCompat.Translucent"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".simple.SimpleListVideoActivityMode2"
android:theme=
"@style/Theme.AppCompat.Translucent"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".simple.SimpleActivity"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".switchplay.SwitchListVideoActivity"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"
keyboard|
orientation|keyboardHidden|screenSize"
android:theme=
"@style/Theme.AppCompat.Transitions"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".switchplay.SwitchDetailActivity"
android:configChanges=
"orientation|keyboardHidden|screenSize"
android:configChanges=
"keyboard|orientation|keyboardHidden|screenSize"
android:theme=
"@style/Theme.AppCompat.Transitions"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".RecyclerView3Activity"
android:configChanges=
"keyboard|orientation|keyboardHidden|screenSize"
android:theme=
"@style/Theme.AppCompat.Transitions"
android:screenOrientation=
"portrait"
/>
<activity
android:name=
".DetailNormalActivityPlayer"
android:configChanges=
"keyboard|orientation|keyboardHidden|screenSize"
android:theme=
"@style/Theme.AppCompat.Transitions"
android:screenOrientation=
"portrait"
/>
...
...
app/src/main/java/com/example/gsyvideoplayer/DetailADPlayer.java
浏览文件 @
23356a23
...
...
@@ -41,13 +41,13 @@ public class DetailADPlayer extends GSYBaseActivityDetail<ListGSYVideoPlayer> {
ArrayList
<
GSYSampleADVideoPlayer
.
GSYADVideoModel
>
urls
=
new
ArrayList
<>();
//广告1
urls
.
add
(
new
GSYSampleADVideoPlayer
.
GSYADVideoModel
(
"http://
video.7k.cn/app_video/20171202/6c8cf3ea/v.m3u8
.mp4"
,
urls
.
add
(
new
GSYSampleADVideoPlayer
.
GSYADVideoModel
(
"http://
7xjmzj.com1.z0.glb.clouddn.com/20171026175005_JObCxCE2
.mp4"
,
""
,
GSYSampleADVideoPlayer
.
GSYADVideoModel
.
TYPE_AD
));
//正式内容1
urls
.
add
(
new
GSYSampleADVideoPlayer
.
GSYADVideoModel
(
"http://9890.vod.myqcloud.com/9890_4e292f9a3dd011e6b4078980237cc3d3.f20.mp4"
,
"正文1标题"
,
GSYSampleADVideoPlayer
.
GSYADVideoModel
.
TYPE_NORMAL
));
//广告2
urls
.
add
(
new
GSYSampleADVideoPlayer
.
GSYADVideoModel
(
"http://
video.7k.cn/app_video/20171202/6c8cf3ea/v.m3u8
.mp4"
,
urls
.
add
(
new
GSYSampleADVideoPlayer
.
GSYADVideoModel
(
"http://
7xjmzj.com1.z0.glb.clouddn.com/20171026175005_JObCxCE2
.mp4"
,
""
,
GSYSampleADVideoPlayer
.
GSYADVideoModel
.
TYPE_AD
,
true
));
//正式内容2
urls
.
add
(
new
GSYSampleADVideoPlayer
.
GSYADVideoModel
(
"http://9890.vod.myqcloud.com/9890_4e292f9a3dd011e6b4078980237cc3d3.f30.mp4"
,
...
...
app/src/main/java/com/example/gsyvideoplayer/DetailADPlayer2.java
浏览文件 @
23356a23
...
...
@@ -21,9 +21,9 @@ public class DetailADPlayer2 extends GSYBaseADActivityDetail<NormalGSYVideoPlaye
private
GSYADVideoPlayer
adPlayer
;
private
String
urlAd
=
"http://
video.7k.cn/app_video/20171202/6c8cf3ea/v.m3u8
.mp4"
;
private
String
urlAd
=
"http://
7xjmzj.com1.z0.glb.clouddn.com/20171026175005_JObCxCE2
.mp4"
;
private
String
urlAd2
=
"http://
video.7k.cn/app_video/20171202/6c8cf3ea/v.m3u8
.mp4"
;
private
String
urlAd2
=
"http://
7xjmzj.com1.z0.glb.clouddn.com/20171026175005_JObCxCE2
.mp4"
;
private
String
url
=
"http://9890.vod.myqcloud.com/9890_4e292f9a3dd011e6b4078980237cc3d3.f20.mp4"
;
...
...
@@ -103,6 +103,7 @@ public class DetailADPlayer2 extends GSYBaseADActivityDetail<NormalGSYVideoPlaye
/**
* 需要片头广告
* 如果返回 false ,setStartAfterPrepared 需要设置为 ture
*/
@Override
public
boolean
isNeedAdOnStart
()
{
...
...
app/src/main/java/com/example/gsyvideoplayer/DetailListPlayer.java
浏览文件 @
23356a23
...
...
@@ -48,7 +48,7 @@ public class DetailListPlayer extends GSYBaseActivityDetail<ListGSYVideoPlayer>
//String url = "http://baobab.wd jcdn.com/14564977406580.mp4";
List
<
GSYVideoModel
>
urls
=
new
ArrayList
<>();
urls
.
add
(
new
GSYVideoModel
(
"http://
video.7k.cn/app_video/20171202/6c8cf3ea/v.m3u8
.mp4"
,
"标题1"
));
urls
.
add
(
new
GSYVideoModel
(
"http://
7xjmzj.com1.z0.glb.clouddn.com/20171026175005_JObCxCE2
.mp4"
,
"标题1"
));
urls
.
add
(
new
GSYVideoModel
(
"http://9890.vod.myqcloud.com/9890_4e292f9a3dd011e6b4078980237cc3d3.f20.mp4"
,
"标题2"
));
urls
.
add
(
new
GSYVideoModel
(
"https://res.exexm.com/cw_145225549855002"
,
"标题3"
));
urls
.
add
(
new
GSYVideoModel
(
"http://9890.vod.myqcloud.com/9890_4e292f9a3dd011e6b4078980237cc3d3.f20.mp4"
,
"标题4"
));
...
...
app/src/main/java/com/example/gsyvideoplayer/DetailNormalActivityPlayer.java
0 → 100644
浏览文件 @
23356a23
package
com.example.gsyvideoplayer
;
import
android.app.Activity
;
import
android.content.res.Configuration
;
import
android.os.Bundle
;
import
android.view.View
;
import
android.widget.ImageView
;
import
android.widget.RelativeLayout
;
import
androidx.appcompat.app.AppCompatActivity
;
import
androidx.core.widget.NestedScrollView
;
import
com.example.gsyvideoplayer.video.LandLayoutVideo
;
import
com.google.android.exoplayer2.SeekParameters
;
import
com.shuyu.gsyvideoplayer.GSYVideoManager
;
import
com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder
;
import
com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack
;
import
com.shuyu.gsyvideoplayer.listener.GSYVideoProgressListener
;
import
com.shuyu.gsyvideoplayer.listener.LockClickListener
;
import
com.shuyu.gsyvideoplayer.utils.Debuger
;
import
com.shuyu.gsyvideoplayer.utils.OrientationUtils
;
import
com.shuyu.gsyvideoplayer.video.base.GSYVideoPlayer
;
import
java.util.HashMap
;
import
java.util.Map
;
import
butterknife.BindView
;
import
butterknife.ButterKnife
;
import
tv.danmaku.ijk.media.exo2.Exo2PlayerManager
;
public
class
DetailNormalActivityPlayer
extends
Activity
{
@BindView
(
R
.
id
.
post_detail_nested_scroll
)
NestedScrollView
postDetailNestedScroll
;
//推荐使用StandardGSYVideoPlayer,功能一致
//CustomGSYVideoPlayer部分功能处于试验阶段
@BindView
(
R
.
id
.
detail_player
)
LandLayoutVideo
detailPlayer
;
@BindView
(
R
.
id
.
activity_detail_player
)
RelativeLayout
activityDetailPlayer
;
private
boolean
isPlay
;
private
boolean
isPause
;
private
OrientationUtils
orientationUtils
;
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
setContentView
(
R
.
layout
.
activity_detail_player
);
ButterKnife
.
bind
(
this
);
String
url
=
getUrl
();
//增加封面
ImageView
imageView
=
new
ImageView
(
this
);
imageView
.
setScaleType
(
ImageView
.
ScaleType
.
CENTER_CROP
);
imageView
.
setImageResource
(
R
.
mipmap
.
xxx1
);
resolveNormalVideoUI
();
//外部辅助的旋转,帮助全屏
orientationUtils
=
new
OrientationUtils
(
this
,
detailPlayer
);
//初始化不打开外部的旋转
orientationUtils
.
setEnable
(
false
);
Map
<
String
,
String
>
header
=
new
HashMap
<>();
header
.
put
(
"ee"
,
"33"
);
header
.
put
(
"allowCrossProtocolRedirects"
,
"true"
);
GSYVideoOptionBuilder
gsyVideoOption
=
new
GSYVideoOptionBuilder
();
gsyVideoOption
.
setThumbImageView
(
imageView
)
.
setIsTouchWiget
(
true
)
.
setRotateViewAuto
(
false
)
.
setLockLand
(
false
)
.
setAutoFullWithSize
(
false
)
.
setShowFullAnimation
(
false
)
.
setNeedLockFull
(
true
)
.
setUrl
(
url
)
.
setMapHeadData
(
header
)
.
setCacheWithPlay
(
false
)
.
setVideoTitle
(
"测试视频"
)
.
setVideoAllCallBack
(
new
GSYSampleCallBack
()
{
@Override
public
void
onPrepared
(
String
url
,
Object
...
objects
)
{
Debuger
.
printfError
(
"***** onPrepared **** "
+
objects
[
0
]);
Debuger
.
printfError
(
"***** onPrepared **** "
+
objects
[
1
]);
super
.
onPrepared
(
url
,
objects
);
//开始播放了才能旋转和全屏
orientationUtils
.
setEnable
(
true
);
isPlay
=
true
;
//设置 seek 的临近帧。
if
(
detailPlayer
.
getGSYVideoManager
().
getPlayer
()
instanceof
Exo2PlayerManager
)
{
((
Exo2PlayerManager
)
detailPlayer
.
getGSYVideoManager
().
getPlayer
()).
setSeekParameter
(
SeekParameters
.
NEXT_SYNC
);
Debuger
.
printfError
(
"***** setSeekParameter **** "
);
}
}
@Override
public
void
onEnterFullscreen
(
String
url
,
Object
...
objects
)
{
super
.
onEnterFullscreen
(
url
,
objects
);
Debuger
.
printfError
(
"***** onEnterFullscreen **** "
+
objects
[
0
]);
//title
Debuger
.
printfError
(
"***** onEnterFullscreen **** "
+
objects
[
1
]);
//当前全屏player
}
@Override
public
void
onAutoComplete
(
String
url
,
Object
...
objects
)
{
super
.
onAutoComplete
(
url
,
objects
);
}
@Override
public
void
onClickStartError
(
String
url
,
Object
...
objects
)
{
super
.
onClickStartError
(
url
,
objects
);
}
@Override
public
void
onQuitFullscreen
(
String
url
,
Object
...
objects
)
{
super
.
onQuitFullscreen
(
url
,
objects
);
Debuger
.
printfError
(
"***** onQuitFullscreen **** "
+
objects
[
0
]);
//title
Debuger
.
printfError
(
"***** onQuitFullscreen **** "
+
objects
[
1
]);
//当前非全屏player
if
(
orientationUtils
!=
null
)
{
orientationUtils
.
backToProtVideo
();
}
}
})
.
setLockClickListener
(
new
LockClickListener
()
{
@Override
public
void
onClick
(
View
view
,
boolean
lock
)
{
if
(
orientationUtils
!=
null
)
{
//配合下方的onConfigurationChanged
orientationUtils
.
setEnable
(!
lock
);
}
}
})
.
setGSYVideoProgressListener
(
new
GSYVideoProgressListener
()
{
@Override
public
void
onProgress
(
int
progress
,
int
secProgress
,
int
currentPosition
,
int
duration
)
{
Debuger
.
printfLog
(
" progress "
+
progress
+
" secProgress "
+
secProgress
+
" currentPosition "
+
currentPosition
+
" duration "
+
duration
);
}
})
.
build
(
detailPlayer
);
detailPlayer
.
getFullscreenButton
().
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
v
)
{
//直接横屏
orientationUtils
.
resolveByClick
();
//第一个true是否需要隐藏actionbar,第二个true是否需要隐藏statusbar
detailPlayer
.
startWindowFullscreen
(
DetailNormalActivityPlayer
.
this
,
false
,
true
);
}
});
}
@Override
public
void
onBackPressed
()
{
if
(
orientationUtils
!=
null
)
{
orientationUtils
.
backToProtVideo
();
}
if
(
GSYVideoManager
.
backFromWindowFull
(
this
))
{
return
;
}
super
.
onBackPressed
();
}
@Override
protected
void
onPause
()
{
getCurPlay
().
onVideoPause
();
super
.
onPause
();
isPause
=
true
;
}
@Override
protected
void
onResume
()
{
getCurPlay
().
onVideoResume
(
false
);
super
.
onResume
();
isPause
=
false
;
}
@Override
protected
void
onDestroy
()
{
super
.
onDestroy
();
if
(
isPlay
)
{
getCurPlay
().
release
();
}
//GSYPreViewManager.instance().releaseMediaPlayer();
if
(
orientationUtils
!=
null
)
orientationUtils
.
releaseListener
();
}
@Override
public
void
onConfigurationChanged
(
Configuration
newConfig
)
{
super
.
onConfigurationChanged
(
newConfig
);
//如果旋转了就全屏
if
(
isPlay
&&
!
isPause
)
{
detailPlayer
.
onConfigurationChanged
(
this
,
newConfig
,
orientationUtils
,
true
,
true
);
}
}
private
void
resolveNormalVideoUI
()
{
//增加title
detailPlayer
.
getTitleTextView
().
setVisibility
(
View
.
GONE
);
detailPlayer
.
getBackButton
().
setVisibility
(
View
.
GONE
);
}
private
GSYVideoPlayer
getCurPlay
()
{
if
(
detailPlayer
.
getFullWindowPlayer
()
!=
null
)
{
return
detailPlayer
.
getFullWindowPlayer
();
}
return
detailPlayer
;
}
private
String
getUrl
()
{
return
"http://9890.vod.myqcloud.com/9890_4e292f9a3dd011e6b4078980237cc3d3.f20.mp4"
;
}
}
app/src/main/java/com/example/gsyvideoplayer/DetailPlayer.java
浏览文件 @
23356a23
...
...
@@ -14,6 +14,7 @@ import com.google.android.exoplayer2.SeekParameters;
import
com.shuyu.gsyvideoplayer.GSYVideoManager
;
import
com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack
;
import
com.shuyu.gsyvideoplayer.listener.GSYVideoProgressListener
;
import
com.shuyu.gsyvideoplayer.model.VideoOptionModel
;
import
com.shuyu.gsyvideoplayer.video.base.GSYVideoPlayer
;
import
com.shuyu.gsyvideoplayer.builder.GSYVideoOptionBuilder
;
...
...
@@ -22,12 +23,15 @@ import com.shuyu.gsyvideoplayer.utils.Debuger;
import
com.shuyu.gsyvideoplayer.utils.OrientationUtils
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
butterknife.BindView
;
import
butterknife.ButterKnife
;
import
tv.danmaku.ijk.media.exo2.Exo2PlayerManager
;
import
tv.danmaku.ijk.media.player.IjkMediaPlayer
;
public
class
DetailPlayer
extends
AppCompatActivity
{
...
...
@@ -70,6 +74,14 @@ public class DetailPlayer extends AppCompatActivity {
//GSYVideoManager.instance().setTimeOut(4000, true);
// VideoOptionModel videoOptionModel =
// new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "dns_cache_clear", 1);
// List<VideoOptionModel> list = new ArrayList<>();
// list.add(videoOptionModel);
// VideoOptionModel videoOptionModel2 = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "dns_cache_timeout", -1);
// list.add(videoOptionModel2);
// GSYVideoManager.instance().setOptionModelList(list);
//增加封面
ImageView
imageView
=
new
ImageView
(
this
);
imageView
.
setScaleType
(
ImageView
.
ScaleType
.
CENTER_CROP
);
...
...
app/src/main/java/com/example/gsyvideoplayer/GSYApplication.java
浏览文件 @
23356a23
...
...
@@ -12,6 +12,7 @@ import com.google.android.exoplayer2.C;
import
com.google.android.exoplayer2.source.MediaSource
;
import
com.google.android.exoplayer2.source.hls.HlsMediaSource
;
import
com.shuyu.gsyvideoplayer.player.PlayerFactory
;
import
com.shuyu.gsyvideoplayer.utils.GSYVideoType
;
import
com.squareup.leakcanary.LeakCanary
;
import
java.io.File
;
...
...
app/src/main/java/com/example/gsyvideoplayer/ListADVideoActivity.java
浏览文件 @
23356a23
...
...
@@ -164,7 +164,7 @@ public class ListADVideoActivity extends AppCompatActivity {
final
String
url
=
"http://9890.vod.myqcloud.com/9890_4e292f9a3dd011e6b4078980237cc3d3.f20.mp4"
;
final
String
urlAD
=
"http://
video.7k.cn/app_video/20171202/6c8cf3ea/v.m3u8
.mp4"
;
final
String
urlAD
=
"http://
7xjmzj.com1.z0.glb.clouddn.com/20171026175005_JObCxCE2
.mp4"
;
//多个播放时必须在setUpLazy、setUp和getGSYVideoManager()等前面设置
holder
.
gsyVideoPlayer
.
setPlayTag
(
TAG
);
...
...
app/src/main/java/com/example/gsyvideoplayer/ListADVideoActivity2.java
浏览文件 @
23356a23
...
...
@@ -165,7 +165,7 @@ public class ListADVideoActivity2 extends AppCompatActivity {
final
String
url
=
"http://9890.vod.myqcloud.com/9890_4e292f9a3dd011e6b4078980237cc3d3.f20.mp4"
;
final
String
urlAD
=
"http://
video.7k.cn/app_video/20171202/6c8cf3ea/v.m3u8
.mp4"
;
final
String
urlAD
=
"http://
7xjmzj.com1.z0.glb.clouddn.com/20171026175005_JObCxCE2
.mp4"
;
//多个播放时必须在setUpLazy、setUp和getGSYVideoManager()等前面设置
holder
.
gsyVideoPlayer
.
setPlayTag
(
TAG
);
...
...
app/src/main/java/com/example/gsyvideoplayer/ListVideoActivity.java
浏览文件 @
23356a23
...
...
@@ -6,6 +6,7 @@ import android.os.Bundle;
import
androidx.appcompat.app.AppCompatActivity
;
import
android.transition.Explode
;
import
android.view.Window
;
import
android.view.WindowManager
;
import
android.widget.AbsListView
;
import
android.widget.ListView
;
import
android.widget.RelativeLayout
;
...
...
@@ -32,6 +33,7 @@ public class ListVideoActivity extends AppCompatActivity {
// 设置一个exit transition
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
LOLLIPOP
)
{
getWindow
().
requestFeature
(
Window
.
FEATURE_CONTENT_TRANSITIONS
);
getWindow
().
addFlags
(
WindowManager
.
LayoutParams
.
FLAG_TRANSLUCENT_STATUS
);
getWindow
().
setEnterTransition
(
new
Explode
());
getWindow
().
setExitTransition
(
new
Explode
());
}
...
...
app/src/main/java/com/example/gsyvideoplayer/MainActivity.java
浏览文件 @
23356a23
...
...
@@ -54,7 +54,7 @@ public class MainActivity extends AppCompatActivity {
@OnClick
({
R
.
id
.
open_btn
,
R
.
id
.
list_btn
,
R
.
id
.
list_btn_2
,
R
.
id
.
list_detail
,
R
.
id
.
clear_cache
,
R
.
id
.
recycler
,
R
.
id
.
recycler_2
,
R
.
id
.
list_detail_list
,
R
.
id
.
web_detail
,
R
.
id
.
danmaku_video
,
R
.
id
.
fragment_video
,
R
.
id
.
more_type
,
R
.
id
.
input_type
,
R
.
id
.
open_btn_empty
,
R
.
id
.
open_control
,
R
.
id
.
open_filter
,
R
.
id
.
open_btn_pick
,
R
.
id
.
open_btn_auto
,
R
.
id
.
open_scroll
,
R
.
id
.
open_window
,
R
.
id
.
open_btn_ad
,
R
.
id
.
open_btn_multi
,
R
.
id
.
open_btn_ad2
,
R
.
id
.
open_list_ad
,
R
.
id
.
open_custom_exo
,
R
.
id
.
open_simple
,
R
.
id
.
open_switch
})
R
.
id
.
open_btn_multi
,
R
.
id
.
open_btn_ad2
,
R
.
id
.
open_list_ad
,
R
.
id
.
open_custom_exo
,
R
.
id
.
open_simple
,
R
.
id
.
open_switch
,
R
.
id
.
media_codec
,
R
.
id
.
detail_normal_activity
})
public
void
onClick
(
View
view
)
{
switch
(
view
.
getId
())
{
case
R
.
id
.
open_simple
:
...
...
@@ -156,6 +156,12 @@ public class MainActivity extends AppCompatActivity {
case
R
.
id
.
open_switch
:
JumpUtils
.
goToSwitch
(
this
);
break
;
case
R
.
id
.
media_codec
:
JumpUtils
.
goMediaCodec
(
this
);
break
;
case
R
.
id
.
detail_normal_activity
:
JumpUtils
.
goToDetailNormalActivity
(
this
);
break
;
case
R
.
id
.
clear_cache
:
//清理缓存
GSYVideoManager
.
instance
().
clearAllDefaultCache
(
MainActivity
.
this
);
...
...
app/src/main/java/com/example/gsyvideoplayer/RecyclerView3Activity.java
0 → 100644
浏览文件 @
23356a23
package
com.example.gsyvideoplayer
;
import
android.graphics.Point
;
import
android.os.Build
;
import
android.os.Bundle
;
import
android.transition.Explode
;
import
android.view.Window
;
import
android.widget.FrameLayout
;
import
androidx.annotation.NonNull
;
import
androidx.annotation.Nullable
;
import
androidx.appcompat.app.AppCompatActivity
;
import
androidx.recyclerview.widget.LinearLayoutManager
;
import
androidx.recyclerview.widget.RecyclerView
;
import
com.example.gsyvideoplayer.adapter.RecyclerBaseAdapter
;
import
com.example.gsyvideoplayer.holder.RecyclerItemViewHolder
;
import
com.example.gsyvideoplayer.mediacodec.MediaCodecVideo
;
import
com.example.gsyvideoplayer.model.VideoModel
;
import
com.shuyu.gsyvideoplayer.GSYVideoManager
;
import
com.shuyu.gsyvideoplayer.listener.GSYSampleCallBack
;
import
com.shuyu.gsyvideoplayer.utils.CommonUtil
;
import
com.shuyu.gsyvideoplayer.utils.Debuger
;
import
com.shuyu.gsyvideoplayer.utils.GSYVideoHelper
;
import
com.shuyu.gsyvideoplayer.utils.GSYVideoType
;
import
java.util.ArrayList
;
import
java.util.List
;
import
butterknife.BindView
;
import
butterknife.ButterKnife
;
/**
* MediaCodec
*
*
*
* 没有适配小窗口切换的,请悉知
*/
public
class
RecyclerView3Activity
extends
AppCompatActivity
{
@BindView
(
R
.
id
.
list_item_recycler
)
RecyclerView
listItemRecycler
;
@BindView
(
R
.
id
.
video_full_container
)
FrameLayout
videoFullContainer
;
LinearLayoutManager
linearLayoutManager
;
RecyclerBaseAdapter
recyclerBaseAdapter
;
List
<
VideoModel
>
dataList
=
new
ArrayList
<>();
GSYVideoHelper
smallVideoHelper
;
GSYVideoHelper
.
GSYVideoHelperBuilder
gsySmallVideoHelperBuilder
;
int
lastVisibleItem
;
int
firstVisibleItem
;
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
// 设置一个exit transition
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
LOLLIPOP
)
{
getWindow
().
requestFeature
(
Window
.
FEATURE_CONTENT_TRANSITIONS
);
getWindow
().
setEnterTransition
(
new
Explode
());
getWindow
().
setExitTransition
(
new
Explode
());
}
super
.
onCreate
(
savedInstanceState
);
setContentView
(
R
.
layout
.
activity_recycler_view2
);
ButterKnife
.
bind
(
this
);
initView
();
listItemRecycler
.
addOnScrollListener
(
new
RecyclerView
.
OnScrollListener
()
{
@Override
public
void
onScrollStateChanged
(
@NonNull
RecyclerView
recyclerView
,
int
newState
)
{
super
.
onScrollStateChanged
(
recyclerView
,
newState
);
}
@Override
public
void
onScrolled
(
@NonNull
RecyclerView
recyclerView
,
int
dx
,
int
dy
)
{
super
.
onScrolled
(
recyclerView
,
dx
,
dy
);
firstVisibleItem
=
linearLayoutManager
.
findFirstVisibleItemPosition
();
lastVisibleItem
=
linearLayoutManager
.
findLastVisibleItemPosition
();
Debuger
.
printfLog
(
"firstVisibleItem "
+
firstVisibleItem
+
" lastVisibleItem "
+
lastVisibleItem
);
//大于0说明有播放,//对应的播放列表TAG
if
(
smallVideoHelper
.
getPlayPosition
()
>=
0
&&
smallVideoHelper
.
getPlayTAG
().
equals
(
RecyclerItemViewHolder
.
TAG
))
{
//当前播放的位置
int
position
=
smallVideoHelper
.
getPlayPosition
();
//不可视的是时候
if
((
position
<
firstVisibleItem
||
position
>
lastVisibleItem
))
{
//如果是小窗口就不需要处理
if
(!
smallVideoHelper
.
isSmall
()
&&
!
smallVideoHelper
.
isFull
())
{
//小窗口
int
size
=
CommonUtil
.
dip2px
(
RecyclerView3Activity
.
this
,
150
);
//actionbar为true才不会掉下面去
smallVideoHelper
.
showSmallVideo
(
new
Point
(
size
,
size
),
true
,
true
);
}
}
else
{
if
(
smallVideoHelper
.
isSmall
())
{
smallVideoHelper
.
smallVideoToNormal
();
}
}
}
}
});
}
@Override
protected
void
onStart
()
{
super
.
onStart
();
/// 打开硬解码
GSYVideoType
.
enableMediaCodec
();
}
@Override
protected
void
onDestroy
()
{
super
.
onDestroy
();
/// 关闭硬解码
GSYVideoType
.
disableMediaCodec
();
smallVideoHelper
.
releaseVideoPlayer
();
GSYVideoManager
.
releaseAllVideos
();
}
@Override
public
void
onBackPressed
()
{
if
(
smallVideoHelper
.
backFromFull
())
{
return
;
}
super
.
onBackPressed
();
}
private
void
initView
()
{
linearLayoutManager
=
new
LinearLayoutManager
(
this
);
listItemRecycler
.
setLayoutManager
(
linearLayoutManager
);
resolveData
();
recyclerBaseAdapter
=
new
RecyclerBaseAdapter
(
this
,
dataList
);
listItemRecycler
.
setAdapter
(
recyclerBaseAdapter
);
smallVideoHelper
=
new
GSYVideoHelper
(
this
,
new
MediaCodecVideo
(
this
));
smallVideoHelper
.
setFullViewContainer
(
videoFullContainer
);
//配置
gsySmallVideoHelperBuilder
=
new
GSYVideoHelper
.
GSYVideoHelperBuilder
();
gsySmallVideoHelperBuilder
.
setHideActionBar
(
true
)
.
setHideStatusBar
(
true
)
.
setNeedLockFull
(
true
)
.
setCacheWithPlay
(
true
)
.
setAutoFullWithSize
(
false
)
.
setShowFullAnimation
(
false
)
.
setLockLand
(
true
).
setVideoAllCallBack
(
new
GSYSampleCallBack
()
{
@Override
public
void
onPrepared
(
String
url
,
Object
...
objects
)
{
super
.
onPrepared
(
url
,
objects
);
Debuger
.
printfLog
(
"Duration "
+
smallVideoHelper
.
getGsyVideoPlayer
().
getDuration
()
+
" CurrentPosition "
+
smallVideoHelper
.
getGsyVideoPlayer
().
getCurrentPositionWhenPlaying
());
}
@Override
public
void
onQuitSmallWidget
(
String
url
,
Object
...
objects
)
{
super
.
onQuitSmallWidget
(
url
,
objects
);
//大于0说明有播放,//对应的播放列表TAG
if
(
smallVideoHelper
.
getPlayPosition
()
>=
0
&&
smallVideoHelper
.
getPlayTAG
().
equals
(
RecyclerItemViewHolder
.
TAG
))
{
//当前播放的位置
int
position
=
smallVideoHelper
.
getPlayPosition
();
//不可视的是时候
if
((
position
<
firstVisibleItem
||
position
>
lastVisibleItem
))
{
//释放掉视频
smallVideoHelper
.
releaseVideoPlayer
();
recyclerBaseAdapter
.
notifyDataSetChanged
();
}
}
}
});
smallVideoHelper
.
setGsyVideoOptionBuilder
(
gsySmallVideoHelperBuilder
);
recyclerBaseAdapter
.
setVideoHelper
(
smallVideoHelper
,
gsySmallVideoHelperBuilder
);
}
private
void
resolveData
()
{
for
(
int
i
=
0
;
i
<
19
;
i
++)
{
VideoModel
videoModel
=
new
VideoModel
();
dataList
.
add
(
videoModel
);
}
if
(
recyclerBaseAdapter
!=
null
)
recyclerBaseAdapter
.
notifyDataSetChanged
();
}
}
app/src/main/java/com/example/gsyvideoplayer/adapter/ListNormalAdapter.java
浏览文件 @
23356a23
...
...
@@ -82,7 +82,7 @@ public class ListNormalAdapter extends BaseAdapter {
//final String url = "https://res.exexm.com/cw_145225549855002";
final
String
urlH
=
"http://9890.vod.myqcloud.com/9890_4e292f9a3dd011e6b4078980237cc3d3.f20.mp4"
;
final
String
urlV
=
"http://
video.7k.cn/app_video/20171202/6c8cf3ea/v.m3u8
.mp4"
;
final
String
urlV
=
"http://
7xjmzj.com1.z0.glb.clouddn.com/20171026175005_JObCxCE2
.mp4"
;
final
String
url
=
(
position
%
2
==
0
)
?
urlH
:
urlV
;
//final String url = "http://111.198.24.133:83/yyy_login_server/pic/YB059284/97778276040859/1.mp4";
...
...
app/src/main/java/com/example/gsyvideoplayer/exo/DetailExoListPlayer.java
浏览文件 @
23356a23
...
...
@@ -45,7 +45,7 @@ public class DetailExoListPlayer extends GSYBaseActivityDetail<GSYExo2PlayerView
List
<
GSYVideoModel
>
urls
=
new
ArrayList
<>();
urls
.
add
(
new
GSYVideoModel
(
"https://media6.smartstudy.com/ae/07/3997/2/dest.m3u8"
,
"标题3"
));
urls
.
add
(
new
GSYVideoModel
(
"http://
video.7k.cn/app_video/20171202/6c8cf3ea/v.m3u8
.mp4"
,
"标题1"
));
urls
.
add
(
new
GSYVideoModel
(
"http://
7xjmzj.com1.z0.glb.clouddn.com/20171026175005_JObCxCE2
.mp4"
,
"标题1"
));
urls
.
add
(
new
GSYVideoModel
(
"http://9890.vod.myqcloud.com/9890_4e292f9a3dd011e6b4078980237cc3d3.f20.mp4"
,
"标题2"
));
detailPlayer
.
setUp
(
urls
,
0
);
...
...
app/src/main/java/com/example/gsyvideoplayer/holder/RecyclerItemViewHolder.java
浏览文件 @
23356a23
...
...
@@ -58,7 +58,7 @@ public class RecyclerItemViewHolder extends RecyclerItemBaseHolder {
if
(
position
%
2
==
0
)
{
url
=
"https://res.exexm.com/cw_145225549855002"
;
}
else
{
url
=
"http://
video.7k.cn/app_video/20171202/6c8cf3ea/v.m3u8
.mp4"
;
url
=
"http://
7xjmzj.com1.z0.glb.clouddn.com/20171026175005_JObCxCE2
.mp4"
;
}
//listVideoUtil.setCachePath(new File(FileUtils.getPath()));
...
...
app/src/main/java/com/example/gsyvideoplayer/mediacodec/MediaCodecRenderView.java
0 → 100644
浏览文件 @
23356a23
package
com.example.gsyvideoplayer.mediacodec
;
import
android.content.Context
;
import
android.view.ViewGroup
;
import
com.example.gsyvideoplayer.view.CustomTextureSurface
;
import
com.shuyu.gsyvideoplayer.render.GSYRenderView
;
import
com.shuyu.gsyvideoplayer.render.glrender.GSYVideoGLViewBaseRender
;
import
com.shuyu.gsyvideoplayer.render.view.GSYVideoGLView
;
import
com.shuyu.gsyvideoplayer.render.view.listener.IGSYSurfaceListener
;
import
com.shuyu.gsyvideoplayer.utils.MeasureHelper
;
/**
* 自定义代理渲染层
* Created by guoshuyu on 2018/1/30.
*/
public
class
MediaCodecRenderView
extends
GSYRenderView
{
@Override
public
void
addView
(
Context
context
,
ViewGroup
textureViewContainer
,
int
rotate
,
IGSYSurfaceListener
gsySurfaceListener
,
MeasureHelper
.
MeasureFormVideoParamsListener
videoParamsListener
,
GSYVideoGLView
.
ShaderInterface
effect
,
float
[]
transform
,
GSYVideoGLViewBaseRender
customRender
,
int
mode
)
{
mShowView
=
MediaCodecTextureView
.
addTextureView
(
context
,
textureViewContainer
,
rotate
,
gsySurfaceListener
,
videoParamsListener
);
}
}
app/src/main/java/com/example/gsyvideoplayer/mediacodec/MediaCodecTextureView.java
0 → 100644
浏览文件 @
23356a23
package
com.example.gsyvideoplayer.mediacodec
;
import
android.content.Context
;
import
android.graphics.Bitmap
;
import
android.graphics.Matrix
;
import
android.graphics.SurfaceTexture
;
import
android.util.AttributeSet
;
import
android.view.Surface
;
import
android.view.TextureView
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
com.shuyu.gsyvideoplayer.listener.GSYVideoShotListener
;
import
com.shuyu.gsyvideoplayer.listener.GSYVideoShotSaveListener
;
import
com.shuyu.gsyvideoplayer.render.GSYRenderView
;
import
com.shuyu.gsyvideoplayer.render.glrender.GSYVideoGLViewBaseRender
;
import
com.shuyu.gsyvideoplayer.render.view.GSYVideoGLView
;
import
com.shuyu.gsyvideoplayer.render.view.IGSYRenderView
;
import
com.shuyu.gsyvideoplayer.render.view.listener.IGSYSurfaceListener
;
import
com.shuyu.gsyvideoplayer.utils.Debuger
;
import
com.shuyu.gsyvideoplayer.utils.FileUtils
;
import
com.shuyu.gsyvideoplayer.utils.MeasureHelper
;
import
java.io.File
;
/**
* 用于硬解码
* Created by shuyu on 2016/11/11.
*/
public
class
MediaCodecTextureView
extends
TextureView
implements
TextureView
.
SurfaceTextureListener
,
IGSYRenderView
,
MeasureHelper
.
MeasureFormVideoParamsListener
{
private
IGSYSurfaceListener
mIGSYSurfaceListener
;
private
MeasureHelper
.
MeasureFormVideoParamsListener
mVideoParamsListener
;
private
MeasureHelper
measureHelper
;
private
SurfaceTexture
mSaveTexture
;
private
Surface
mSurface
;
public
MediaCodecTextureView
(
Context
context
)
{
super
(
context
);
init
();
}
public
MediaCodecTextureView
(
Context
context
,
AttributeSet
attrs
)
{
super
(
context
,
attrs
);
init
();
}
private
void
init
()
{
measureHelper
=
new
MeasureHelper
(
this
,
this
);
}
@Override
protected
void
onMeasure
(
int
widthMeasureSpec
,
int
heightMeasureSpec
)
{
measureHelper
.
prepareMeasure
(
widthMeasureSpec
,
heightMeasureSpec
,
(
int
)
getRotation
());
setMeasuredDimension
(
measureHelper
.
getMeasuredWidth
(),
measureHelper
.
getMeasuredHeight
());
}
@Override
public
void
onSurfaceTextureAvailable
(
SurfaceTexture
texture
,
int
width
,
int
height
)
{
if
(
mSaveTexture
==
null
)
{
mSaveTexture
=
texture
;
mSurface
=
new
Surface
(
texture
);
if
(
mIGSYSurfaceListener
!=
null
)
{
mIGSYSurfaceListener
.
onSurfaceAvailable
(
mSurface
);
}
}
else
{
setSurfaceTexture
(
mSaveTexture
);
}
}
@Override
public
void
onSurfaceTextureSizeChanged
(
SurfaceTexture
surface
,
int
width
,
int
height
)
{
if
(
mIGSYSurfaceListener
!=
null
)
{
mIGSYSurfaceListener
.
onSurfaceSizeChanged
(
mSurface
,
width
,
height
);
}
}
@Override
public
boolean
onSurfaceTextureDestroyed
(
SurfaceTexture
surface
)
{
//清空释放
if
(
mIGSYSurfaceListener
!=
null
)
{
mIGSYSurfaceListener
.
onSurfaceDestroyed
(
mSurface
);
}
return
(
mSaveTexture
==
null
);
}
@Override
public
void
onSurfaceTextureUpdated
(
SurfaceTexture
surface
)
{
//如果播放的是暂停全屏了
if
(
mIGSYSurfaceListener
!=
null
)
{
mIGSYSurfaceListener
.
onSurfaceUpdated
(
mSurface
);
}
}
@Override
public
IGSYSurfaceListener
getIGSYSurfaceListener
()
{
return
mIGSYSurfaceListener
;
}
@Override
public
void
setIGSYSurfaceListener
(
IGSYSurfaceListener
surfaceListener
)
{
setSurfaceTextureListener
(
this
);
mIGSYSurfaceListener
=
surfaceListener
;
}
@Override
public
int
getSizeH
()
{
return
getHeight
();
}
@Override
public
int
getSizeW
()
{
return
getWidth
();
}
/**
* 暂停时初始化位图
*/
@Override
public
Bitmap
initCover
()
{
Bitmap
bitmap
=
Bitmap
.
createBitmap
(
getSizeW
(),
getSizeH
(),
Bitmap
.
Config
.
RGB_565
);
return
getBitmap
(
bitmap
);
}
/**
* 暂停时初始化位图
*/
@Override
public
Bitmap
initCoverHigh
()
{
Bitmap
bitmap
=
Bitmap
.
createBitmap
(
getSizeW
(),
getSizeH
(),
Bitmap
.
Config
.
ARGB_8888
);
return
getBitmap
(
bitmap
);
}
/**
* 获取截图
*
* @param shotHigh 是否需要高清的
*/
@Override
public
void
taskShotPic
(
GSYVideoShotListener
gsyVideoShotListener
,
boolean
shotHigh
)
{
if
(
shotHigh
)
{
gsyVideoShotListener
.
getBitmap
(
initCoverHigh
());
}
else
{
gsyVideoShotListener
.
getBitmap
(
initCover
());
}
}
/**
* 保存截图
*
* @param high 是否需要高清的
*/
@Override
public
void
saveFrame
(
final
File
file
,
final
boolean
high
,
final
GSYVideoShotSaveListener
gsyVideoShotSaveListener
)
{
GSYVideoShotListener
gsyVideoShotListener
=
new
GSYVideoShotListener
()
{
@Override
public
void
getBitmap
(
Bitmap
bitmap
)
{
if
(
bitmap
==
null
)
{
gsyVideoShotSaveListener
.
result
(
false
,
file
);
}
else
{
FileUtils
.
saveBitmap
(
bitmap
,
file
);
gsyVideoShotSaveListener
.
result
(
true
,
file
);
}
}
};
if
(
high
)
{
gsyVideoShotListener
.
getBitmap
(
initCoverHigh
());
}
else
{
gsyVideoShotListener
.
getBitmap
(
initCover
());
}
}
@Override
public
View
getRenderView
()
{
return
this
;
}
@Override
public
void
onRenderResume
()
{
Debuger
.
printfLog
(
getClass
().
getSimpleName
()
+
" not support onRenderResume now"
);
}
@Override
public
void
onRenderPause
()
{
Debuger
.
printfLog
(
getClass
().
getSimpleName
()
+
" not support onRenderPause now"
);
}
@Override
public
void
releaseRenderAll
()
{
Debuger
.
printfLog
(
getClass
().
getSimpleName
()
+
" not support releaseRenderAll now"
);
}
@Override
public
void
setRenderMode
(
int
mode
)
{
Debuger
.
printfLog
(
getClass
().
getSimpleName
()
+
" not support setRenderMode now"
);
}
@Override
public
void
setRenderTransform
(
Matrix
transform
)
{
setTransform
(
transform
);
}
@Override
public
void
setGLRenderer
(
GSYVideoGLViewBaseRender
renderer
)
{
Debuger
.
printfLog
(
getClass
().
getSimpleName
()
+
" not support setGLRenderer now"
);
}
@Override
public
void
setGLMVPMatrix
(
float
[]
MVPMatrix
)
{
Debuger
.
printfLog
(
getClass
().
getSimpleName
()
+
" not support setGLMVPMatrix now"
);
}
/**
* 设置滤镜效果
*/
@Override
public
void
setGLEffectFilter
(
GSYVideoGLView
.
ShaderInterface
effectFilter
)
{
Debuger
.
printfLog
(
getClass
().
getSimpleName
()
+
" not support setGLEffectFilter now"
);
}
@Override
public
void
setVideoParamsListener
(
MeasureHelper
.
MeasureFormVideoParamsListener
listener
)
{
mVideoParamsListener
=
listener
;
}
@Override
public
int
getCurrentVideoWidth
()
{
if
(
mVideoParamsListener
!=
null
)
{
return
mVideoParamsListener
.
getCurrentVideoWidth
();
}
return
0
;
}
@Override
public
int
getCurrentVideoHeight
()
{
if
(
mVideoParamsListener
!=
null
)
{
return
mVideoParamsListener
.
getCurrentVideoHeight
();
}
return
0
;
}
@Override
public
int
getVideoSarNum
()
{
if
(
mVideoParamsListener
!=
null
)
{
return
mVideoParamsListener
.
getVideoSarNum
();
}
return
0
;
}
@Override
public
int
getVideoSarDen
()
{
if
(
mVideoParamsListener
!=
null
)
{
return
mVideoParamsListener
.
getVideoSarDen
();
}
return
0
;
}
public
void
release
()
{
mSaveTexture
=
null
;
}
/**
* 添加播放的view
*/
public
static
MediaCodecTextureView
addTextureView
(
Context
context
,
ViewGroup
textureViewContainer
,
int
rotate
,
final
IGSYSurfaceListener
gsySurfaceListener
,
final
MeasureHelper
.
MeasureFormVideoParamsListener
videoParamsListener
)
{
if
(
textureViewContainer
.
getChildCount
()
>
0
)
{
textureViewContainer
.
removeAllViews
();
}
MediaCodecTextureView
gsyTextureView
=
new
MediaCodecTextureView
(
context
);
gsyTextureView
.
setIGSYSurfaceListener
(
gsySurfaceListener
);
gsyTextureView
.
setVideoParamsListener
(
videoParamsListener
);
gsyTextureView
.
setRotation
(
rotate
);
GSYRenderView
.
addToParent
(
textureViewContainer
,
gsyTextureView
);
return
gsyTextureView
;
}
}
\ No newline at end of file
app/src/main/java/com/example/gsyvideoplayer/mediacodec/MediaCodecVideo.java
0 → 100644
浏览文件 @
23356a23
package
com.example.gsyvideoplayer.mediacodec
;
import
android.content.Context
;
import
android.util.AttributeSet
;
import
android.view.Surface
;
import
com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer
;
import
com.shuyu.gsyvideoplayer.video.base.GSYBaseVideoPlayer
;
public
class
MediaCodecVideo
extends
StandardGSYVideoPlayer
{
public
MediaCodecVideo
(
Context
context
,
Boolean
fullFlag
)
{
super
(
context
,
fullFlag
);
}
public
MediaCodecVideo
(
Context
context
)
{
super
(
context
);
}
public
MediaCodecVideo
(
Context
context
,
AttributeSet
attrs
)
{
super
(
context
,
attrs
);
}
@Override
public
GSYBaseVideoPlayer
startWindowFullscreen
(
Context
context
,
boolean
actionBar
,
boolean
statusBar
)
{
return
super
.
startWindowFullscreen
(
context
,
actionBar
,
statusBar
);
}
@Override
public
void
onSurfaceAvailable
(
Surface
surface
)
{
super
.
onSurfaceAvailable
(
surface
);
}
@Override
public
boolean
onSurfaceDestroyed
(
Surface
surface
)
{
//清空释放
//setDisplay(null);
//同一消息队列中去release
//releaseSurface(surface);
return
true
;
}
@Override
protected
void
addTextureView
()
{
mTextureView
=
new
MediaCodecRenderView
();
mTextureView
.
addView
(
getContext
(),
mTextureViewContainer
,
mRotate
,
this
,
this
,
mEffectFilter
,
mMatrixGL
,
mRenderer
,
mMode
);
}
}
app/src/main/java/com/example/gsyvideoplayer/simple/SimpleDetailActivityMode1.java
浏览文件 @
23356a23
...
...
@@ -17,7 +17,7 @@ public class SimpleDetailActivityMode1 extends GSYBaseActivityDetail<StandardGSY
StandardGSYVideoPlayer
detailPlayer
;
private
String
url
=
"http://
video.7k.cn/app_video/20171202/6c8cf3ea/v.m3u8
.mp4"
;
private
String
url
=
"http://
7xjmzj.com1.z0.glb.clouddn.com/20171026175005_JObCxCE2
.mp4"
;
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
...
...
app/src/main/java/com/example/gsyvideoplayer/simple/SimpleDetailActivityMode2.java
浏览文件 @
23356a23
...
...
@@ -34,7 +34,7 @@ public class SimpleDetailActivityMode2 extends AppCompatActivity {
detailPlayer
=
(
StandardGSYVideoPlayer
)
findViewById
(
R
.
id
.
detail_player
);
String
url
=
"http://
video.7k.cn/app_video/20171202/6c8cf3ea/v.m3u8
.mp4"
;
String
url
=
"http://
7xjmzj.com1.z0.glb.clouddn.com/20171026175005_JObCxCE2
.mp4"
;
//增加封面
ImageView
imageView
=
new
ImageView
(
this
);
...
...
app/src/main/java/com/example/gsyvideoplayer/simple/adapter/SimpleListVideoModeAdapter.java
浏览文件 @
23356a23
...
...
@@ -69,7 +69,7 @@ public class SimpleListVideoModeAdapter extends BaseAdapter {
}
final
String
urlH
=
"http://9890.vod.myqcloud.com/9890_4e292f9a3dd011e6b4078980237cc3d3.f20.mp4"
;
final
String
urlV
=
"http://
video.7k.cn/app_video/20171202/6c8cf3ea/v.m3u8
.mp4"
;
final
String
urlV
=
"http://
7xjmzj.com1.z0.glb.clouddn.com/20171026175005_JObCxCE2
.mp4"
;
final
String
url
=
(
position
%
2
==
0
)
?
urlH
:
urlV
;
if
(
position
%
2
==
0
)
{
...
...
app/src/main/java/com/example/gsyvideoplayer/switchplay/SwitchListVideoAdapter.java
浏览文件 @
23356a23
...
...
@@ -70,7 +70,7 @@ public class SwitchListVideoAdapter extends BaseAdapter {
holder
=
(
ViewHolder
)
convertView
.
getTag
();
}
final
String
urlH
=
"http://9890.vod.myqcloud.com/9890_4e292f9a3dd011e6b4078980237cc3d3.f20.mp4"
;
final
String
urlV
=
"http://
video.7k.cn/app_video/20171202/6c8cf3ea/v.m3u8
.mp4"
;
final
String
urlV
=
"http://
7xjmzj.com1.z0.glb.clouddn.com/20171026175005_JObCxCE2
.mp4"
;
final
String
url
=
(
position
%
2
==
0
)
?
urlH
:
urlV
;
final
int
coverId
=
(
position
%
2
==
0
)
?
R
.
mipmap
.
xxx1
:
R
.
mipmap
.
xxx2
;
...
...
app/src/main/java/com/example/gsyvideoplayer/utils/JumpUtils.java
浏览文件 @
23356a23
...
...
@@ -15,6 +15,7 @@ import com.example.gsyvideoplayer.DetailControlActivity;
import
com.example.gsyvideoplayer.DetailFilterActivity
;
import
com.example.gsyvideoplayer.DetailListPlayer
;
import
com.example.gsyvideoplayer.DetailMoreTypeActivity
;
import
com.example.gsyvideoplayer.DetailNormalActivityPlayer
;
import
com.example.gsyvideoplayer.DetailPlayer
;
import
com.example.gsyvideoplayer.FragmentVideoActivity
;
import
com.example.gsyvideoplayer.InputUrlDetailActivity
;
...
...
@@ -27,6 +28,7 @@ import com.example.gsyvideoplayer.PlayEmptyControlActivity;
import
com.example.gsyvideoplayer.PlayPickActivity
;
import
com.example.gsyvideoplayer.R
;
import
com.example.gsyvideoplayer.RecyclerView2Activity
;
import
com.example.gsyvideoplayer.RecyclerView3Activity
;
import
com.example.gsyvideoplayer.RecyclerViewActivity
;
import
com.example.gsyvideoplayer.ScrollingActivity
;
import
com.example.gsyvideoplayer.WebDetailActivity
;
...
...
@@ -155,6 +157,18 @@ public class JumpUtils {
ActivityCompat
.
startActivity
(
activity
,
intent
,
activityOptions
.
toBundle
());
}
/**
* 跳转到硬解码
*
* @param activity
*/
public
static
void
goMediaCodec
(
Activity
activity
)
{
Intent
intent
=
new
Intent
(
activity
,
RecyclerView3Activity
.
class
);
ActivityOptionsCompat
activityOptions
=
ActivityOptionsCompat
.
makeSceneTransitionAnimation
(
activity
);
ActivityCompat
.
startActivity
(
activity
,
intent
,
activityOptions
.
toBundle
());
}
/**
* 跳转到详情播放
*
...
...
@@ -231,6 +245,16 @@ public class JumpUtils {
activity
.
startActivity
(
intent
);
}
/**
* 跳转到详情播放
*
* @param activity
*/
public
static
void
goToDetailNormalActivity
(
Activity
activity
)
{
Intent
intent
=
new
Intent
(
activity
,
DetailNormalActivityPlayer
.
class
);
activity
.
startActivity
(
intent
);
}
/**
* 跳转到详情播放
*
...
...
app/src/main/java/com/example/gsyvideoplayer/video/RequestListADVideoPlayer.java
浏览文件 @
23356a23
...
...
@@ -40,8 +40,8 @@ public class RequestListADVideoPlayer extends ListADVideoPlayer {
//模拟请求失败
onError
(
0
,
0
);
}
else
{
mOriginUrl
=
"http://
video.7k.cn/app_video/20171202/6c8cf3ea/v.m3u8
.mp4"
;
mUrl
=
"http://
video.7k.cn/app_video/20171202/6c8cf3ea/v.m3u8
.mp4"
;
mOriginUrl
=
"http://
7xjmzj.com1.z0.glb.clouddn.com/20171026175005_JObCxCE2
.mp4"
;
mUrl
=
"http://
7xjmzj.com1.z0.glb.clouddn.com/20171026175005_JObCxCE2
.mp4"
;
mTitle
=
"ffff1"
;
}
mCache
=
false
;
...
...
app/src/main/res/layout/activity_main.xml
浏览文件 @
23356a23
...
...
@@ -195,6 +195,21 @@
android:layout_marginTop=
"20dp"
android:text=
"列表带广告模式"
/>
<Button
android:id=
"@+id/media_codec"
android:layout_width=
"240dp"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"20dp"
android:text=
"硬解码支持"
/>
<Button
android:id=
"@+id/detail_normal_activity"
android:layout_width=
"240dp"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"20dp"
android:text=
"普通 Activity"
/>
<Button
android:id=
"@+id/open_custom_exo"
android:layout_width=
"240dp"
...
...
app/src/main/res/xml/network_security_config.xml
0 → 100644
浏览文件 @
23356a23
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config
cleartextTrafficPermitted=
"true"
/>
</network-security-config>
\ No newline at end of file
doc/QUESTION.md
浏览文件 @
23356a23
...
...
@@ -233,14 +233,17 @@ VideoOptionModel videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATE
list.add(videoOptionModel);
```
#### 18、url切换400
(http与https域名共用
)
#### 18、url切换400
/404(http与https域名共用等
)
```
VideoOptionModel videoOptionModel =
VideoOptionModel videoOptionModel =
new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "dns_cache_clear", 1);
List<VideoOptionModel> list = new ArrayList<>();
list.add(videoOptionModel);
VideoOptionModel videoOptionModel2 = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "dns_cache_timeout", -1);
list.add(videoOptionModel2);
GSYVideoManager.instance().setOptionModelList(list);
```
#### 19、全屏与非全屏的同步问题
...
...
gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/GSYBaseADActivityDetail.java
浏览文件 @
23356a23
...
...
@@ -206,6 +206,7 @@ public abstract class GSYBaseADActivityDetail<T extends GSYBaseVideoPlayer, R ex
/**
* 是否播放开始广告
* 如果返回 false ,setStartAfterPrepared 需要设置为 ture
*/
public
abstract
boolean
isNeedAdOnStart
();
}
gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/render/view/GSYTextureView.java
浏览文件 @
23356a23
...
...
@@ -34,6 +34,7 @@ public class GSYTextureView extends TextureView implements TextureView.SurfaceTe
private
MeasureHelper
measureHelper
;
private
SurfaceTexture
mSaveTexture
;
private
Surface
mSurface
;
public
GSYTextureView
(
Context
context
)
{
...
...
@@ -58,9 +59,17 @@ public class GSYTextureView extends TextureView implements TextureView.SurfaceTe
@Override
public
void
onSurfaceTextureAvailable
(
SurfaceTexture
surface
,
int
width
,
int
height
)
{
mSurface
=
new
Surface
(
surface
);
if
(
mIGSYSurfaceListener
!=
null
)
{
mIGSYSurfaceListener
.
onSurfaceAvailable
(
mSurface
);
if
(
mSaveTexture
==
null
)
{
Debuger
.
printfError
(
"FFFFFFFFFFFF 1"
);
mSaveTexture
=
surface
;
mSurface
=
new
Surface
(
surface
);
if
(
mIGSYSurfaceListener
!=
null
)
{
mIGSYSurfaceListener
.
onSurfaceAvailable
(
mSurface
);
}
}
else
{
setSurfaceTexture
(
mSaveTexture
);
Debuger
.
printfError
(
"FFFFFFFFFFFF 2"
);
//mSurface = new Surface(mSaveTexture);
}
}
...
...
@@ -77,7 +86,7 @@ public class GSYTextureView extends TextureView implements TextureView.SurfaceTe
if
(
mIGSYSurfaceListener
!=
null
)
{
mIGSYSurfaceListener
.
onSurfaceDestroyed
(
mSurface
);
}
return
true
;
return
(
mSaveTexture
==
null
)
;
}
@Override
...
...
gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/utils/CommonUtil.java
浏览文件 @
23356a23
...
...
@@ -13,6 +13,7 @@ import androidx.appcompat.app.AppCompatActivity;
import
androidx.appcompat.view.ContextThemeWrapper
;
import
androidx.appcompat.widget.TintContextWrapper
;
import
androidx.fragment.app.FragmentActivity
;
import
android.util.DisplayMetrics
;
import
android.util.TypedValue
;
import
android.view.Surface
;
...
...
@@ -124,6 +125,10 @@ public class CommonUtil {
FragmentActivity
fragmentActivity
=
(
FragmentActivity
)
context
;
fragmentActivity
.
getWindow
().
setFlags
(
WindowManager
.
LayoutParams
.
FLAG_FULLSCREEN
,
WindowManager
.
LayoutParams
.
FLAG_FULLSCREEN
);
}
else
if
(
context
instanceof
Activity
)
{
Activity
activity
=
(
Activity
)
context
;
activity
.
getWindow
().
setFlags
(
WindowManager
.
LayoutParams
.
FLAG_FULLSCREEN
,
WindowManager
.
LayoutParams
.
FLAG_FULLSCREEN
);
}
else
{
CommonUtil
.
getAppCompActivity
(
context
).
getWindow
().
setFlags
(
WindowManager
.
LayoutParams
.
FLAG_FULLSCREEN
,
WindowManager
.
LayoutParams
.
FLAG_FULLSCREEN
);
...
...
@@ -148,6 +153,9 @@ public class CommonUtil {
if
(
context
instanceof
FragmentActivity
)
{
FragmentActivity
fragmentActivity
=
(
FragmentActivity
)
context
;
fragmentActivity
.
getWindow
().
clearFlags
(
WindowManager
.
LayoutParams
.
FLAG_FULLSCREEN
);
}
else
if
(
context
instanceof
Activity
)
{
Activity
activity
=
(
Activity
)
context
;
activity
.
getWindow
().
clearFlags
(
WindowManager
.
LayoutParams
.
FLAG_FULLSCREEN
);
}
else
{
CommonUtil
.
getAppCompActivity
(
context
).
getWindow
().
clearFlags
(
WindowManager
.
LayoutParams
.
FLAG_FULLSCREEN
);
}
...
...
gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/video/base/GSYBaseVideoPlayer.java
浏览文件 @
23356a23
...
...
@@ -11,6 +11,7 @@ import android.view.Gravity;
import
android.view.View
;
import
android.view.ViewGroup
;
import
android.view.Window
;
import
android.view.WindowManager
;
import
android.widget.FrameLayout
;
import
com.shuyu.gsyvideoplayer.R
;
...
...
@@ -192,13 +193,18 @@ public abstract class GSYBaseVideoPlayer extends GSYVideoControlView {
*/
private
void
saveLocationStatus
(
Context
context
,
boolean
statusBar
,
boolean
actionBar
)
{
getLocationOnScreen
(
mListItemRect
);
int
statusBarH
=
getStatusBarHeight
(
context
);
int
actionBerH
=
getActionBarHeight
((
Activity
)
context
);
if
(
statusBar
)
{
mListItemRect
[
1
]
=
mListItemRect
[
1
]
-
statusBarH
;
}
if
(
actionBar
)
{
mListItemRect
[
1
]
=
mListItemRect
[
1
]
-
actionBerH
;
if
(
context
instanceof
Activity
)
{
int
statusBarH
=
getStatusBarHeight
(
context
);
int
actionBerH
=
getActionBarHeight
((
Activity
)
context
);
boolean
isTranslucent
=
((
WindowManager
.
LayoutParams
.
FLAG_TRANSLUCENT_STATUS
&
((
Activity
)
context
).
getWindow
().
getAttributes
().
flags
)
==
WindowManager
.
LayoutParams
.
FLAG_TRANSLUCENT_STATUS
);
Debuger
.
printfLog
(
"*************isTranslucent*************** "
+
isTranslucent
);
if
(
statusBar
&&
!
isTranslucent
)
{
mListItemRect
[
1
]
=
mListItemRect
[
1
]
-
statusBarH
;
}
if
(
actionBar
)
{
mListItemRect
[
1
]
=
mListItemRect
[
1
]
-
actionBerH
;
}
}
mListItemSize
[
0
]
=
getWidth
();
mListItemSize
[
1
]
=
getHeight
();
...
...
gsyVideoPlayer/build.gradle
浏览文件 @
23356a23
...
...
@@ -50,14 +50,14 @@ dependencies {
//api "com.shuyu:gsyVideoPlayer-java:$gsyVideoVersion"
//api "com.shuyu:GSYVideoPlayer-exo2:$gsyVideoVersion"
api
"com.shuyu:gsyVideoPlayer-armv5:$gsyVideoVersion"
api
"com.shuyu:gsyVideoPlayer-armv7a:$gsyVideoVersion"
api
"com.shuyu:gsyVideoPlayer-arm64:$gsyVideoVersion"
api
"com.shuyu:gsyVideoPlayer-x64:$gsyVideoVersion"
api
"com.shuyu:gsyVideoPlayer-x86:$gsyVideoVersion"
//
api "com.shuyu:gsyVideoPlayer-armv5:$gsyVideoVersion"
//
api "com.shuyu:gsyVideoPlayer-armv7a:$gsyVideoVersion"
//
api "com.shuyu:gsyVideoPlayer-arm64:$gsyVideoVersion"
//
api "com.shuyu:gsyVideoPlayer-x64:$gsyVideoVersion"
//
api "com.shuyu:gsyVideoPlayer-x86:$gsyVideoVersion"
//更多配置版so,增加了concat,rtsp,mpeg,crypto
//
api "com.shuyu:gsyVideoPlayer-ex_so:$gsyVideoVersion"
api
"com.shuyu:gsyVideoPlayer-ex_so:$gsyVideoVersion"
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录