提交 8fba002d 编写于 作者: G guoshuyu

增加多个同时播放支持

上级 8478d386
......@@ -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();
}
}*/
}
}
});
}
......
......@@ -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");
}
......
......@@ -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;
}
}
......@@ -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<>();
/**
* 单例管理器
*/
......
......@@ -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();
......
......@@ -242,7 +242,9 @@ public final class MeasureHelper {
mCurrentAspectRatio = aspectRatio;
}
/**
* 构造宽高所需要的视频相关参数
*/
public interface MeasureFormVideoParamsListener {
int getCurrentVideoWidth();
......
......@@ -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);
}
......
......@@ -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 (IllegalStateException 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 (IllegalStateException 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.
先完成此消息的编辑!
想要评论请 注册