MIT License

项目介绍

waynell/VideoListPlayer 是一个托管在 GitHub 上的开源项目,主要使用 Java 编写,采用 MIT License 许可证,目前获得 1.3k 个 Star、255 次 Fork。

仓库全名
waynell/VideoListPlayer
开源许可证
MIT License
Star 数
1.3k
Fork 数
255
未关闭 Issue
18

README 摘要

VideoListPlayer VideoListPlayer实现了在列表控件(ListView, RecyclerView)中加载并播放视频,并支持滑动时自动播放/暂停的功能 利用该项目,可以轻松实现类似Instagram的视频播放功能 注意:最低支持API 14以上 效果预览 Changelogs v.14 1. 支持更多类型的scaleType,详见 Android-ScalableVideoView 2. 加入 getCurrentPosition() 和 getDuration() 接口 v1.3 1. fix在多类型列表元素中出现视频无法正常播放的bug Demo 更新 1. 增加在ListView中播放视频的示例 2. ListView和RecyclerView中支持多类型view type展示 v1.2 1. fix NPE bugs v1.1 1. 自动播放/停止功能性能优化 2. 视频播放加入声音开关控制…

完整内容见 GitHub 原始 README 或本页 。

常见问题

VideoListPlayer 用什么语言开发?

主要使用 Java 编写,采用 MIT License 许可证,目前有 1.3k 个 Star。

VideoListPlayer 可以免费商用吗?

仓库采用 MIT License 许可证,可免费使用与修改,商业使用请遵守许可证条款(例如保留版权声明与许可声明)。

如何获取 VideoListPlayer 的源码?

可以直接克隆仓库:git clone https://github.com/waynell/VideoListPlayer.git,默认分支为 master;安装与运行步骤见仓库 README。

VideoListPlayer 最近还在维护吗?

仓库最近一次更新为 2017年1月5日,当前有 18 个未关闭 Issue;Star 数为 1.3k,可作为社区活跃度的参考。

关于

GitHub 原始描述(英文)

Play video in ListView or RecyclerView

描述取自 GitHub 官方 API,保持仓库作者书写的原文。

简要分析

热度分
1888
价值分
874
活跃状态
活跃

语言占比

Java

Release

贡献者

README

Build Status

VideoListPlayer

VideoListPlayer实现了在列表控件(ListView, RecyclerView)中加载并播放视频,并支持滑动时自动播放/暂停的功能

利用该项目,可以轻松实现类似Instagram的视频播放功能

注意:最低支持API 14以上

#效果预览

#Changelogs

v.14

  1. 支持更多类型的scaleType,详见 Android-ScalableVideoView
  2. 加入 getCurrentPosition() 和 getDuration() 接口

v1.3

  1. fix在多类型列表元素中出现视频无法正常播放的bug

Demo 更新

  1. 增加在ListView中播放视频的示例
  2. ListView和RecyclerView中支持多类型view type展示

v1.2

  1. fix NPE bugs

v1.1

  1. 自动播放/停止功能性能优化

  2. 视频播放加入声音开关控制,默认播放视频关闭声音,点击视频开启声音

  3. fix在4.1.1以下无法播放视频的bug

#基本用法 添加gradle依赖

repositories {
	maven { url "https://jitpack.io" }
}

dependencies {
        compile 'com.github.waynell:VideoListPlayer:1.4'
}

在xml布局中加入以下代码

<com.waynell.videolist.widget.TextureVideoView
        android:id="@+id/video_view"
        android:layout_width="match_parent"
        android:layout_height="300dp" />

然后设置视频路径地址,最后调用start()方法开始播放视频

videoView.setVideoPath(mVideoPath);
videoView.start();

视频播放是异步的,可以通过设置MediaPlayerCallback回调监听播放事件

view.setMediaPlayerCallback(this);

监听事件如下

void onPrepared(MediaPlayer mp);
void onCompletion(MediaPlayer mp);
void onBufferingUpdate(MediaPlayer mp, int percent);
void onVideoSizeChanged(MediaPlayer mp, int width, int height);

boolean onInfo(MediaPlayer mp, int what, int extra);
boolean onError(MediaPlayer mp, int what, int extra);

#滑动时自动播放/停止的功能 首先,你必须实现ListItem接口来获取item被激活或取消激活的事件回调

public interface ListItem {
    
    // 当前item被激活
    void setActive(View newActiveView, int newActiveViewPosition);
    
    // 当前item被取消
    void deactivate(View currentView, int position);
}

其次,实现ItemsProvider接口返回当前列表总数和列表中某一位置的ListItem实例

public interface ItemsProvider {

	ListItem getListItem(int position);

	int listItemSize();
}

最后添加以下代码实现可见比的计算,以RecyclerView为例

ItemsProvider itemProvider;

ListItemsVisibilityCalculator calculator = new SingleListViewItemActiveCalculator(itemProvider,
	new RecyclerViewItemPositionGetter(layoutManager, mRecyclerView););

mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            mScrollState = newState;
            if(newState == RecyclerView.SCROLL_STATE_IDLE && !mListItems.isEmpty()){
                mCalculator.onScrollStateIdle();
            }
        }

        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            mCalculator.onScrolled(mScrollState);
        }
    });

网络视频的本地缓存

请参考demo工程的实现

#实现原理 请参见我的博客 视频在滑动列表中的异步缓存和播放

#Thanks VideoPlayerManager 滑动自动播放/暂停的功能基于项目优化而来

评论

暂无评论