Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
ac13
GSYVideoPlayer
提交
8fba002d
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 搜索 >>
提交
8fba002d
编写于
1月 31, 2018
作者:
G
guoshuyu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
增加多个同时播放支持
上级
8478d386
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
58 addition
and
33 deletion
+58
-33
app/src/main/java/com/example/gsyvideoplayer/ListMultiVideoActivity.java
...va/com/example/gsyvideoplayer/ListMultiVideoActivity.java
+24
-9
app/src/main/java/com/example/gsyvideoplayer/adapter/ListMultiNormalAdapter.java
...xample/gsyvideoplayer/adapter/ListMultiNormalAdapter.java
+4
-6
app/src/main/java/com/example/gsyvideoplayer/video/MultiSampleVideo.java
...va/com/example/gsyvideoplayer/video/MultiSampleVideo.java
+7
-0
app/src/main/java/com/example/gsyvideoplayer/video/manager/CustomManager.java
...m/example/gsyvideoplayer/video/manager/CustomManager.java
+2
-2
gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/render/view/IGSYRenderView.java
.../com/shuyu/gsyvideoplayer/render/view/IGSYRenderView.java
+13
-10
gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/utils/MeasureHelper.java
...in/java/com/shuyu/gsyvideoplayer/utils/MeasureHelper.java
+3
-1
gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/video/base/GSYBaseVideoPlayer.java
...m/shuyu/gsyvideoplayer/video/base/GSYBaseVideoPlayer.java
+3
-3
gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/video/base/GSYVideoView.java
...ava/com/shuyu/gsyvideoplayer/video/base/GSYVideoView.java
+2
-2
未找到文件。
app/src/main/java/com/example/gsyvideoplayer/ListMultiVideoActivity.java
浏览文件 @
8fba002d
...
...
@@ -11,6 +11,10 @@ import android.widget.ListView;
import
com.example.gsyvideoplayer.adapter.ListMultiNormalAdapter
;
import
com.example.gsyvideoplayer.video.manager.CustomManager
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
import
butterknife.BindView
;
import
butterknife.ButterKnife
;
...
...
@@ -50,18 +54,29 @@ public class ListMultiVideoActivity extends AppCompatActivity {
public
void
onScroll
(
AbsListView
view
,
int
firstVisibleItem
,
int
visibleItemCount
,
int
totalItemCount
)
{
int
lastVisibleItem
=
firstVisibleItem
+
visibleItemCount
;
//大于0说明有播放
/*if (GSYVideoManager.instance().getPlayPosition() >= 0) {
//当前播放的位置
int position = GSYVideoManager.instance().getPlayPosition();
//对应的播放列表TAG
if (GSYVideoManager.instance().getPlayTag().equals(ListMultiNormalAdapter.TAG)
&& (position < firstVisibleItem || position > lastVisibleItem)) {
//如果滑出去了上面和下面就是否,和今日头条一样
GSYVideoManager.releaseAllVideos();
if
(
CustomManager
.
instance
().
size
()
>=
0
)
{
Map
<
String
,
CustomManager
>
map
=
CustomManager
.
instance
();
List
<
String
>
removeKey
=
new
ArrayList
<>();
for
(
Map
.
Entry
<
String
,
CustomManager
>
customManagerEntry
:
map
.
entrySet
())
{
CustomManager
customManager
=
customManagerEntry
.
getValue
();
//当前播放的位置
int
position
=
customManager
.
getPlayPosition
();
//对应的播放列表TAG
if
(
customManager
.
getPlayTag
().
equals
(
ListMultiNormalAdapter
.
TAG
)
&&
(
position
<
firstVisibleItem
||
position
>
lastVisibleItem
))
{
CustomManager
.
releaseAllVideos
(
customManagerEntry
.
getKey
());
removeKey
.
add
(
customManagerEntry
.
getKey
());
}
}
if
(
removeKey
.
size
()
>
0
)
{
for
(
String
key
:
removeKey
)
{
map
.
remove
(
key
);
}
listMultiNormalAdapter
.
notifyDataSetChanged
();
}
}
*/
}
}
});
}
...
...
app/src/main/java/com/example/gsyvideoplayer/adapter/ListMultiNormalAdapter.java
浏览文件 @
8fba002d
...
...
@@ -70,15 +70,13 @@ public class ListMultiNormalAdapter extends BaseAdapter {
final
String
url
=
"http://9890.vod.myqcloud.com/9890_4e292f9a3dd011e6b4078980237cc3d3.f20.mp4"
;
//多个播放时必须在setUpLazy、setUp和getGSYVideoManager()等前面设置
holder
.
gsyVideoPlayer
.
setPlayTag
(
TAG
);
holder
.
gsyVideoPlayer
.
setPlayPosition
(
position
);
if
(
holder
.
gsyVideoPlayer
.
getGSYVideoManager
()
!=
null
&&
holder
.
gsyVideoPlayer
.
getGSYVideoManager
().
getMediaPlayer
()
!=
null
)
{
boolean
isPlaying
=
holder
.
gsyVideoPlayer
.
isInPlayingState
();
if
(!
isPlaying
)
{
holder
.
gsyVideoPlayer
.
setUpLazy
(
url
,
false
,
null
,
null
,
"这是title"
);
}
}
else
{
boolean
isPlaying
=
holder
.
gsyVideoPlayer
.
getCurrentPlayer
().
isInPlayingState
();
if
(!
isPlaying
)
{
holder
.
gsyVideoPlayer
.
setUpLazy
(
url
,
false
,
null
,
null
,
"这是title"
);
}
...
...
app/src/main/java/com/example/gsyvideoplayer/video/MultiSampleVideo.java
浏览文件 @
8fba002d
...
...
@@ -2,6 +2,7 @@ package com.example.gsyvideoplayer.video;
import
android.content.Context
;
import
android.media.AudioManager
;
import
android.text.TextUtils
;
import
android.util.AttributeSet
;
import
com.danikula.videocache.HttpProxyCacheServer
;
...
...
@@ -91,6 +92,12 @@ public class MultiSampleVideo extends SampleCoverVideo {
}
public
String
getKey
()
{
if
(
mPlayPosition
==
-
22
)
{
throw
new
IllegalStateException
(
"PlayPosition never set."
);
}
if
(
TextUtils
.
isEmpty
(
mPlayTag
))
{
throw
new
IllegalStateException
(
"PlayTag never set."
);
}
return
TAG
+
mPlayPosition
+
mPlayTag
;
}
}
app/src/main/java/com/example/gsyvideoplayer/video/manager/CustomManager.java
浏览文件 @
8fba002d
...
...
@@ -26,6 +26,8 @@ public class CustomManager extends GSYVideoBaseManager {
public
static
String
TAG
=
"GSYVideoManager"
;
private
static
Map
<
String
,
CustomManager
>
sMap
=
new
HashMap
<>();
/***
* @param libLoader 是否使用外部动态加载so
* */
...
...
@@ -84,8 +86,6 @@ public class CustomManager extends GSYVideoBaseManager {
}
private
static
Map
<
String
,
CustomManager
>
sMap
=
new
HashMap
<>();
/**
* 单例管理器
*/
...
...
gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/render/view/IGSYRenderView.java
浏览文件 @
8fba002d
...
...
@@ -22,20 +22,30 @@ public interface IGSYRenderView {
IGSYSurfaceListener
getIGSYSurfaceListener
();
/**
* Surface变化监听
* Surface变化监听
,必须
*/
void
setIGSYSurfaceListener
(
IGSYSurfaceListener
surfaceListener
);
/**
* 当前view高度
* 当前view高度
,必须
*/
int
getSizeH
();
/**
* 当前view宽度
* 当前view宽度
,必须
*/
int
getSizeW
();
/**
* 实现该接口的view,必须
*/
View
getRenderView
();
/**
* 渲染view通过MeasureFormVideoParamsListener获取视频的相关参数,必须
*/
void
setVideoParamsListener
(
MeasureHelper
.
MeasureFormVideoParamsListener
listener
);
/**
* 截图
*/
...
...
@@ -46,11 +56,6 @@ public interface IGSYRenderView {
*/
void
saveFrame
(
final
File
file
,
final
boolean
high
,
final
GSYVideoShotSaveListener
gsyVideoShotSaveListener
);
/**
* 实现该接口的view
*/
View
getRenderView
();
/**
* 获取当前画面的bitmap,没有返回空
*/
...
...
@@ -61,8 +66,6 @@ public interface IGSYRenderView {
*/
Bitmap
initCoverHigh
();
void
setVideoParamsListener
(
MeasureHelper
.
MeasureFormVideoParamsListener
listener
);
void
onRenderResume
();
void
onRenderPause
();
...
...
gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/utils/MeasureHelper.java
浏览文件 @
8fba002d
...
...
@@ -242,7 +242,9 @@ public final class MeasureHelper {
mCurrentAspectRatio
=
aspectRatio
;
}
/**
* 构造宽高所需要的视频相关参数
*/
public
interface
MeasureFormVideoParamsListener
{
int
getCurrentVideoWidth
();
...
...
gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/video/base/GSYBaseVideoPlayer.java
浏览文件 @
8fba002d
...
...
@@ -192,9 +192,6 @@ public abstract class GSYBaseVideoPlayer extends GSYVideoControlView {
* @param to
*/
protected
void
cloneParams
(
GSYBaseVideoPlayer
from
,
GSYBaseVideoPlayer
to
)
{
to
.
setLooping
(
from
.
isLooping
());
to
.
setSpeed
(
from
.
getSpeed
(),
from
.
mSoundTouch
);
to
.
setIsTouchWigetFull
(
from
.
mIsTouchWigetFull
);
to
.
mHadPlay
=
from
.
mHadPlay
;
to
.
mPlayTag
=
from
.
mPlayTag
;
to
.
mPlayPosition
=
from
.
mPlayPosition
;
...
...
@@ -226,6 +223,9 @@ public abstract class GSYBaseVideoPlayer extends GSYVideoControlView {
}
else
{
to
.
setUp
(
from
.
mOriginUrl
,
from
.
mCache
,
from
.
mCachePath
,
from
.
mMapHeadData
,
from
.
mTitle
);
}
to
.
setLooping
(
from
.
isLooping
());
to
.
setIsTouchWigetFull
(
from
.
mIsTouchWigetFull
);
to
.
setSpeed
(
from
.
getSpeed
(),
from
.
mSoundTouch
);
to
.
setStateAndUi
(
from
.
mCurrentState
);
}
...
...
gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/video/base/GSYVideoView.java
浏览文件 @
8fba002d
...
...
@@ -707,7 +707,7 @@ public abstract class GSYVideoView extends GSYTextureRenderView implements GSYMe
if
(
mCurrentState
==
CURRENT_STATE_PLAYING
||
mCurrentState
==
CURRENT_STATE_PAUSE
)
{
try
{
position
=
(
int
)
getGSYVideoManager
().
getMediaPlayer
().
getCurrentPosition
();
}
catch
(
IllegalState
Exception
e
)
{
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
position
;
}
...
...
@@ -725,7 +725,7 @@ public abstract class GSYVideoView extends GSYTextureRenderView implements GSYMe
int
duration
=
0
;
try
{
duration
=
(
int
)
getGSYVideoManager
().
getMediaPlayer
().
getDuration
();
}
catch
(
IllegalState
Exception
e
)
{
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
duration
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录