Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
ac13
GSYVideoPlayer
提交
fe783659
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 搜索 >>
提交
fe783659
编写于
5月 16, 2018
作者:
G
guoshuyu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ExoPlayer 支持looping
上级
dd1bc77c
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
39 addition
and
99 deletion
+39
-99
README.md
README.md
+3
-24
UPDATE_VERSION.md
UPDATE_VERSION.md
+4
-0
app/src/main/java/com/example/gsyvideoplayer/adapter/ListNormalAdapter.java
...com/example/gsyvideoplayer/adapter/ListNormalAdapter.java
+1
-1
gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/player/EXO2PlayerManager.java
...va/com/shuyu/gsyvideoplayer/player/EXO2PlayerManager.java
+1
-0
gsyvideoplayer-exo2/src/main/java/tv/danmaku/ijk/media/exo2/IjkExo2MediaPlayer.java
...in/java/tv/danmaku/ijk/media/exo2/IjkExo2MediaPlayer.java
+25
-24
gsyvideoplayer-exo2/src/main/java/tv/danmaku/ijk/media/exo2/demo/EventLogger.java
...main/java/tv/danmaku/ijk/media/exo2/demo/EventLogger.java
+5
-16
gsyvideoplayer-exo2/src/main/java/tv/danmaku/ijk/media/exo2/demo/player/SimpleExoPlayer2.java
.../danmaku/ijk/media/exo2/demo/player/SimpleExoPlayer2.java
+0
-34
未找到文件。
README.md
浏览文件 @
fe783659
...
...
@@ -131,6 +131,9 @@ compile 'com.shuyu:gsyVideoPlayer-ex_so:4.1.3'
<img
src=
"https://github.com/CarGuo/GSYVideoPlayer/blob/master/07.gif"
height=
"240px"
/>
## 五、近期版本
### 4.1.4(2018-XX-XX)
*
update ExoPlayer to 2.8.0
*
优化ExoPlayer的问题,增加ExoPlayer循环播放支持
### 4.1.3(2018-05-11)
*
优化单双击
...
...
@@ -144,30 +147,6 @@ compile 'com.shuyu:gsyVideoPlayer-ex_so:4.1.3'
public void setAutoFullWithSize(boolean autoFullWithSize)
```
### 4.1.2(2018-04-14)
*
修复已知问题。
*
增加ijkplayer的raw播放支持。
```
String url = "android.resource://" + getPackageName() + "/" + R.raw.test;
GSYVideoManager.instance().enableRawPlay(getApplicationContext());
```
*
danmku分支提供网络弹幕demo
### 4.1.1 (2018-04-01)
*
1、update support lib to 26.0.2
*
2、修复了渲染层在某些条件下,截图时返回大小不对问题。
*
3、一些细节的优化处理。
*
4、增加Manager的isFullState方法
```
/*
* 当前是否全屏状态
*
* @return 当前是否全屏状态, true代表是。
*/
public static boolean isFullState(Activity activity)
```
### 更多版本请查阅:[版本更新说明](https://github.com/CarGuo/GSYVideoPlayer/blob/master/UPDATE_VERSION.md)
## 六、关于Issues
...
...
UPDATE_VERSION.md
浏览文件 @
fe783659
## 下方个版本说明,可以当做简单的wiki使用~,效果可参考DEMO。
### 4.1.4(2018-XX-XX)
*
update ExoPlayer to 2.8.0
*
优化ExoPlayer的问题
### 4.1.3(2018-05-11)
*
优化单双击
*
update support and build sdk to 27
...
...
app/src/main/java/com/example/gsyvideoplayer/adapter/ListNormalAdapter.java
浏览文件 @
fe783659
...
...
@@ -154,7 +154,7 @@ public class ListNormalAdapter extends BaseAdapter {
holder
.
gsyVideoPlayer
.
setShowFullAnimation
(!
getListNeedAutoLand
());
holder
.
gsyVideoPlayer
.
setIsTouchWiget
(
false
);
//循环
//
holder.gsyVideoPlayer.setLooping(true);
holder
.
gsyVideoPlayer
.
setLooping
(
true
);
holder
.
gsyVideoPlayer
.
setNeedLockFull
(
true
);
//holder.gsyVideoPlayer.setSpeed(2);
...
...
gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/player/EXO2PlayerManager.java
浏览文件 @
fe783659
...
...
@@ -41,6 +41,7 @@ public class EXO2PlayerManager implements IPlayerManager {
dummySurface
=
DummySurface
.
newInstanceV17
(
context
,
false
);
}
try
{
mediaPlayer
.
setLooping
(((
GSYModel
)
msg
.
obj
).
isLooping
());
mediaPlayer
.
setDataSource
(
context
,
Uri
.
parse
(((
GSYModel
)
msg
.
obj
).
getUrl
()),
((
GSYModel
)
msg
.
obj
).
getMapHeadData
());
//很遗憾,EXO2的setSpeed只能在播放前生效
if
(((
GSYModel
)
msg
.
obj
).
getSpeed
()
!=
1
&&
((
GSYModel
)
msg
.
obj
).
getSpeed
()
>
0
)
{
...
...
gsyvideoplayer-exo2/src/main/java/tv/danmaku/ijk/media/exo2/IjkExo2MediaPlayer.java
浏览文件 @
fe783659
...
...
@@ -31,6 +31,7 @@ import com.google.android.exoplayer2.C;
import
com.google.android.exoplayer2.DefaultLoadControl
;
import
com.google.android.exoplayer2.DefaultRenderersFactory
;
import
com.google.android.exoplayer2.ExoPlaybackException
;
import
com.google.android.exoplayer2.ExoPlayerFactory
;
import
com.google.android.exoplayer2.Format
;
import
com.google.android.exoplayer2.PlaybackParameters
;
import
com.google.android.exoplayer2.Player
;
...
...
@@ -42,6 +43,7 @@ import com.google.android.exoplayer2.ext.rtmp.RtmpDataSourceFactory;
import
com.google.android.exoplayer2.extractor.DefaultExtractorsFactory
;
import
com.google.android.exoplayer2.metadata.Metadata
;
import
com.google.android.exoplayer2.source.ExtractorMediaSource
;
import
com.google.android.exoplayer2.source.LoopingMediaSource
;
import
com.google.android.exoplayer2.source.MediaSource
;
import
com.google.android.exoplayer2.source.MediaSourceEventListener
;
import
com.google.android.exoplayer2.source.TrackGroupArray
;
...
...
@@ -66,7 +68,6 @@ import java.util.HashMap;
import
java.util.Map
;
import
tv.danmaku.ijk.media.exo2.demo.EventLogger
;
import
tv.danmaku.ijk.media.exo2.demo.player.SimpleExoPlayer2
;
import
tv.danmaku.ijk.media.player.AbstractMediaPlayer
;
import
tv.danmaku.ijk.media.player.IMediaPlayer
;
import
tv.danmaku.ijk.media.player.MediaInfo
;
...
...
@@ -98,6 +99,7 @@ public class IjkExo2MediaPlayer extends AbstractMediaPlayer implements Player.Ev
private
boolean
lastReportedPlayWhenReady
;
private
boolean
mIsPrepareing
=
true
;
private
boolean
mIsBuffering
=
false
;
private
boolean
isLooping
=
false
;
private
int
audioSessionId
=
C
.
AUDIO_SESSION_ID_UNSET
;
...
...
@@ -193,7 +195,7 @@ public class IjkExo2MediaPlayer extends AbstractMediaPlayer implements Player.Ev
renderersFactory
=
new
DefaultRenderersFactory
(
mAppContext
,
extensionRendererMode
);
DefaultLoadControl
loadControl
=
new
DefaultLoadControl
();
mInternalPlayer
=
SimpleExoPlayer2
.
createSimpleExoPlayer2
(
renderersFactory
,
mTrackSelector
,
loadControl
,
null
);
mInternalPlayer
=
ExoPlayerFactory
.
newSimpleInstance
(
renderersFactory
,
mTrackSelector
,
loadControl
,
null
);
mInternalPlayer
.
addListener
(
this
);
mInternalPlayer
.
addAnalyticsListener
(
this
);
mInternalPlayer
.
addListener
(
mEventLogger
);
...
...
@@ -316,14 +318,12 @@ public class IjkExo2MediaPlayer extends AbstractMediaPlayer implements Player.Ev
@Override
public
void
setLooping
(
boolean
looping
)
{
// TODO: no support
throw
new
UnsupportedOperationException
(
"no support"
);
isLooping
=
looping
;
}
@Override
public
boolean
isLooping
()
{
// TODO: no support
return
false
;
return
isLooping
;
}
@Override
...
...
@@ -428,38 +428,39 @@ public class IjkExo2MediaPlayer extends AbstractMediaPlayer implements Player.Ev
private
MediaSource
getMediaSource
(
boolean
preview
)
{
Uri
contentUri
=
Uri
.
parse
(
mDataSource
);
int
contentType
=
inferContentType
(
mDataSource
);
MediaSource
mediaSource
;
switch
(
contentType
)
{
case
C
.
TYPE_SS
:
{
MediaSource
mediaSource
=
new
SsMediaSource
.
Factory
(
case
C
.
TYPE_SS
:
mediaSource
=
new
SsMediaSource
.
Factory
(
new
DefaultSsChunkSource
.
Factory
(
getDataSourceFactory
(
preview
)),
new
DefaultDataSourceFactory
(
mAppContext
,
null
,
getHttpDataSourceFactory
(
preview
))).
createMediaSource
(
contentUri
);
return
mediaSource
;
}
case
C
.
TYPE_DASH
:
{
MediaSource
mediaSource
=
new
DashMediaSource
.
Factory
(
new
DefaultDashChunkSource
.
Factory
(
getDataSourceFactory
(
preview
)),
break
;
case
C
.
TYPE_DASH
:
mediaSource
=
new
DashMediaSource
.
Factory
(
new
DefaultDashChunkSource
.
Factory
(
getDataSourceFactory
(
preview
)),
new
DefaultDataSourceFactory
(
mAppContext
,
null
,
getHttpDataSourceFactory
(
preview
))).
createMediaSource
(
contentUri
);
return
mediaSource
;
}
case
C
.
TYPE_HLS
:
{
MediaSource
mediaSource
=
new
HlsMediaSource
.
Factory
(
getDataSourceFactory
(
preview
)).
createMediaSource
(
contentUri
);
return
mediaSource
;
}
case
TYPE_RTMP:
{
break
;
case
C
.
TYPE_HLS
:
mediaSource
=
new
HlsMediaSource
.
Factory
(
getDataSourceFactory
(
preview
)).
createMediaSource
(
contentUri
);
break
;
case
TYPE_RTMP:
RtmpDataSourceFactory
rtmpDataSourceFactory
=
new
RtmpDataSourceFactory
(
null
);
MediaSource
mediaSource
=
new
ExtractorMediaSource
.
Factory
(
rtmpDataSourceFactory
)
mediaSource
=
new
ExtractorMediaSource
.
Factory
(
rtmpDataSourceFactory
)
.
setExtractorsFactory
(
new
DefaultExtractorsFactory
())
.
createMediaSource
(
contentUri
);
return
mediaSource
;
}
break
;
case
C
.
TYPE_OTHER
:
default
:
MediaSource
mediaSource
=
new
ExtractorMediaSource
.
Factory
(
getDataSourceFactory
(
preview
))
mediaSource
=
new
ExtractorMediaSource
.
Factory
(
getDataSourceFactory
(
preview
))
.
setExtractorsFactory
(
new
DefaultExtractorsFactory
())
.
createMediaSource
(
contentUri
);
return
mediaSource
;
break
;
}
if
(
isLooping
())
{
return
new
LoopingMediaSource
(
mediaSource
);
}
return
mediaSource
;
}
private
DataSource
.
Factory
getDataSourceFactory
(
boolean
preview
)
{
...
...
gsyvideoplayer-exo2/src/main/java/tv/danmaku/ijk/media/exo2/demo/EventLogger.java
浏览文件 @
fe783659
...
...
@@ -29,7 +29,7 @@ import com.google.android.exoplayer2.RendererCapabilities;
import
com.google.android.exoplayer2.Timeline
;
import
com.google.android.exoplayer2.audio.AudioRendererEventListener
;
import
com.google.android.exoplayer2.decoder.DecoderCounters
;
import
com.google.android.exoplayer2.drm.DefaultDrmSession
Manag
er
;
import
com.google.android.exoplayer2.drm.DefaultDrmSession
EventListen
er
;
import
com.google.android.exoplayer2.metadata.Metadata
;
import
com.google.android.exoplayer2.metadata.MetadataOutput
;
import
com.google.android.exoplayer2.metadata.emsg.EventMessage
;
...
...
@@ -40,8 +40,6 @@ import com.google.android.exoplayer2.metadata.id3.Id3Frame;
import
com.google.android.exoplayer2.metadata.id3.PrivFrame
;
import
com.google.android.exoplayer2.metadata.id3.TextInformationFrame
;
import
com.google.android.exoplayer2.metadata.id3.UrlLinkFrame
;
import
com.google.android.exoplayer2.source.AdaptiveMediaSourceEventListener
;
import
com.google.android.exoplayer2.source.ExtractorMediaSource
;
import
com.google.android.exoplayer2.source.MediaSource
;
import
com.google.android.exoplayer2.source.MediaSourceEventListener
;
import
com.google.android.exoplayer2.source.TrackGroup
;
...
...
@@ -50,7 +48,6 @@ import com.google.android.exoplayer2.trackselection.MappingTrackSelector;
import
com.google.android.exoplayer2.trackselection.MappingTrackSelector.MappedTrackInfo
;
import
com.google.android.exoplayer2.trackselection.TrackSelection
;
import
com.google.android.exoplayer2.trackselection.TrackSelectionArray
;
import
com.google.android.exoplayer2.upstream.DataSpec
;
import
com.google.android.exoplayer2.video.VideoRendererEventListener
;
import
java.io.IOException
;
...
...
@@ -59,8 +56,8 @@ import java.util.Locale;
public
final
class
EventLogger
implements
Player
.
EventListener
,
MetadataOutput
,
AudioRendererEventListener
,
VideoRendererEventListener
,
Adaptive
MediaSourceEventListener
,
ExtractorMediaSource
.
EventListener
,
DefaultDrmSessionManager
.
EventListener
{
AudioRendererEventListener
,
VideoRendererEventListener
,
MediaSourceEventListener
,
DefaultDrmSession
EventListener
{
private
static
final
String
TAG
=
"EventLogger"
;
private
static
final
int
MAX_TIMELINE_ITEM_LINES
=
3
;
...
...
@@ -279,7 +276,7 @@ public final class EventLogger implements Player.EventListener, MetadataOutput,
Log
.
d
(
TAG
,
"renderedFirstFrame ["
+
surface
+
"]"
);
}
// DefaultDrmSession
Manager.
EventListener
// DefaultDrmSessionEventListener
@Override
public
void
onDrmSessionManagerError
(
Exception
e
)
{
...
...
@@ -301,15 +298,7 @@ public final class EventLogger implements Player.EventListener, MetadataOutput,
Log
.
d
(
TAG
,
"drmKeysLoaded ["
+
getSessionTimeString
()
+
"]"
);
}
// ExtractorMediaSource.EventListener
@Override
public
void
onLoadError
(
IOException
error
)
{
printInternalError
(
"loadError"
,
error
);
}
// AdaptiveMediaSourceEventListener
//MediaSourceEventListener
@Override
public
void
onTimelineChanged
(
Timeline
timeline
,
Object
manifest
,
int
reason
)
{
...
...
gsyvideoplayer-exo2/src/main/java/tv/danmaku/ijk/media/exo2/demo/player/SimpleExoPlayer2.java
已删除
100644 → 0
浏览文件 @
dd1bc77c
package
tv.danmaku.ijk.media.exo2.demo.player
;
import
android.annotation.TargetApi
;
import
android.support.annotation.Nullable
;
import
com.google.android.exoplayer2.LoadControl
;
import
com.google.android.exoplayer2.RenderersFactory
;
import
com.google.android.exoplayer2.SimpleExoPlayer
;
import
com.google.android.exoplayer2.analytics.AnalyticsCollector
;
import
com.google.android.exoplayer2.drm.DrmSessionManager
;
import
com.google.android.exoplayer2.drm.FrameworkMediaCrypto
;
import
com.google.android.exoplayer2.trackselection.TrackSelector
;
import
com.google.android.exoplayer2.util.Clock
;
@TargetApi
(
16
)
public
class
SimpleExoPlayer2
extends
SimpleExoPlayer
{
protected
SimpleExoPlayer2
(
RenderersFactory
renderersFactory
,
TrackSelector
trackSelector
,
LoadControl
loadControl
,
@Nullable
DrmSessionManager
<
FrameworkMediaCrypto
>
drmSessionManager
)
{
super
(
renderersFactory
,
trackSelector
,
loadControl
,
drmSessionManager
);
}
protected
SimpleExoPlayer2
(
RenderersFactory
renderersFactory
,
TrackSelector
trackSelector
,
LoadControl
loadControl
,
@Nullable
DrmSessionManager
<
FrameworkMediaCrypto
>
drmSessionManager
,
AnalyticsCollector
.
Factory
analyticsCollectorFactory
)
{
super
(
renderersFactory
,
trackSelector
,
loadControl
,
drmSessionManager
,
analyticsCollectorFactory
);
}
protected
SimpleExoPlayer2
(
RenderersFactory
renderersFactory
,
TrackSelector
trackSelector
,
LoadControl
loadControl
,
@Nullable
DrmSessionManager
<
FrameworkMediaCrypto
>
drmSessionManager
,
AnalyticsCollector
.
Factory
analyticsCollectorFactory
,
Clock
clock
)
{
super
(
renderersFactory
,
trackSelector
,
loadControl
,
drmSessionManager
,
analyticsCollectorFactory
,
clock
);
}
public
synchronized
static
SimpleExoPlayer2
createSimpleExoPlayer2
(
RenderersFactory
renderersFactory
,
TrackSelector
trackSelector
,
LoadControl
loadControl
,
@Nullable
DrmSessionManager
<
FrameworkMediaCrypto
>
drmSessionManager
)
{
return
new
SimpleExoPlayer2
(
renderersFactory
,
trackSelector
,
loadControl
,
drmSessionManager
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录