All Projects → jianjunxiao → Nicevieoplayer

jianjunxiao / Nicevieoplayer

IjkPlayer/MediaPlayer+TextureView,支持列表,完美切换全屏、小窗口的Android视频播放器

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to Nicevieoplayer

Flyleaf
Media Player .NET Library for WPF/WinForms (based on FFmpeg/DirectX)
Stars: ✭ 323 (-84.72%)
Mutual labels:  video-player, media-player, mediaplayer
Celluloid
A simple GTK+ frontend for mpv
Stars: ✭ 541 (-74.41%)
Mutual labels:  video-player, media-player
Playerdemo
一个视频播放器,开源版 potplayer ,用于总结播放器开发技术。
Stars: ✭ 491 (-76.77%)
Mutual labels:  video-player, media-player
Glow
mpv Config File Generator for Windows
Stars: ✭ 167 (-92.1%)
Mutual labels:  video-player, media-player
Mpv Easy Player
MPV-EASY Player - A movie player based on mpv
Stars: ✭ 324 (-84.67%)
Mutual labels:  video-player, media-player
Vue Video Player
🎞 @videojs component for @vuejs
Stars: ✭ 4,026 (+90.44%)
Mutual labels:  video-player, player-video
Universalvideoview
A better Android VideoView with more Media Controller customization. 一个更好用的Android VideoView
Stars: ✭ 941 (-55.49%)
Mutual labels:  media-player, mediaplayer
ad-alexatalkingclock
Alexa (or other Smart Speakers) tell you the time without asking every hour. Please ⭐️if you like my app :)
Stars: ✭ 30 (-98.58%)
Mutual labels:  media-player, mediaplayer
React Native Jw Media Player
React-Native Android/iOS bridge for JWPlayer SDK (https://www.jwplayer.com/)
Stars: ✭ 76 (-96.4%)
Mutual labels:  media-player, mediaplayer
Streama
Self hosted streaming media server. https://docs.streama-project.com/
Stars: ✭ 8,948 (+323.27%)
Mutual labels:  video-player, media-player
Guayadeque
Guayadeque is a music management program designed for all music enthusiasts. It is Full Featured Linux media player that can easily manage large collections and uses the Gstreamer media framework.
Stars: ✭ 87 (-95.88%)
Mutual labels:  media-player, mediaplayer
Dkvideoplayer
Android Video Player. 安卓视频播放器,封装MediaPlayer、ExoPlayer、IjkPlayer。模仿抖音并实现预加载,列表播放,悬浮播放,广告播放,弹幕
Stars: ✭ 3,796 (+79.56%)
Mutual labels:  video-player, mediaplayer
KingPlayer
🎬 一个专注于 Android 视频播放器的基础库,无缝切换内核。(IjkPlayer、ExoPlayer、VlcPlayer、MediaPlayer)
Stars: ✭ 35 (-98.34%)
Mutual labels:  video-player, mediaplayer
Artplayer
Kotlin实现的视频播放器,将MediaPlayer与VideoView解耦合,支持切换播放器内核(如ExoPlayer和ijkPlayer),支持自定义控制视图,提供MediaPlayerManager实现全屏模式,小屏幕模式等。
Stars: ✭ 471 (-77.72%)
Mutual labels:  video-player, media-player
kaltura-player-js
Kaltura Player JS Platform - Cloud TV and OVP Media Players
Stars: ✭ 83 (-96.07%)
Mutual labels:  video-player, media-player
Mpv.net
🎞 mpv.net is a modern media player for Windows that works just like mpv.
Stars: ✭ 737 (-65.14%)
Mutual labels:  video-player, media-player
Clapper
A GNOME media player built using GJS with GTK4 toolkit and powered by GStreamer with OpenGL rendering.
Stars: ✭ 103 (-95.13%)
Mutual labels:  video-player, media-player
video-server
Server which connects to set of existing RTSP's and provides HLS/MSE-based streams.
Stars: ✭ 12 (-99.43%)
Mutual labels:  video-player, player-video
Media player
An flutter media player to make media streaming apps effortlessly! read getting started tutorial on https://medium.com/@tamhanekar.siddhesh95/integrate-media-player-into-your-flutter-application-23040213f0c9
Stars: ✭ 45 (-97.87%)
Mutual labels:  video-player, media-player
Avideo
Create Your Own Broadcast Network With AVideo Platform Open-Source. OAVP OVP
Stars: ✭ 1,329 (-37.13%)
Mutual labels:  video-player, media-player

NiceVieoPlayer

API 作者

Features

  • 用IjkPlayer/MediaPlayer + TextureView封装,可切换IjkPlayer、MediaPlayer.
  • 支持本地和网络视频播放.
  • 完美切换小窗口、全屏,可在RecyclerView中无缝全屏.
  • 手势滑动调节播放进度、亮度、声音.
  • 支持清晰度切换.
  • 可自定义控制界面.

Usage

下载niceviewoplayer库,在AndroidStudio中作为Mudule添加依赖。

或者在Gradle中添加依赖:

allprojects {
    repositories {
    ...
    maven { url 'https://jitpack.io' }
    }
}

dependencies {
    compile 'com.github.xiaoyanger0825:NiceVieoPlayer:v2.2'
}

在对应视频界面所在的Activity的Manifest.xml中需要添加如下配置:

android:configChanges="orientation|keyboardHidden|screenSize"

1.在Activity中使用

在Activity中使用时,该Activity需要继承自AppCompatActivity,在onStop中需要释放播放器,并且要在onBackPress中处理按下返回键的逻辑:

private void init() {
    mNiceVideoPlayer = (NiceVideoPlayer) findViewById(R.id.nice_video_player);
    mNiceVideoPlayer.setPlayerType(NiceVideoPlayer.TYPE_IJK); // or NiceVideoPlayer.TYPE_NATIVE
    mNiceVideoPlayer.setUp(mVideoUrl, null);
  
    TxVideoPlayerController controller = new TxVideoPlayerController(this);
    controller.setTitle(mTitle);
    controller.setImage(mImageUrl);
    mNiceVideoPlayer.setController(controller);
}

@Override
protected void onStop() {
    super.onStop();
    // 在onStop时释放掉播放器
    NiceVideoPlayerManager.instance().releaseNiceVideoPlayer();
}
@Override
public void onBackPressed() {
    // 在全屏或者小窗口时按返回键要先退出全屏或小窗口,
    // 所以在Activity中onBackPress要交给NiceVideoPlayer先处理。
    if (NiceVideoPlayerManager.instance().onBackPressd()) return;
    super.onBackPressed();
}

详细可参考demo中的TinyWindowPlayActivityChangeClarityActivityRecyclerViewActivity.

2.在Fragment中使用

在Fragment中使用时,该Fragment外层的Activity需要继承自AppCompatActivity,并且也要处理返回键按下逻辑:

public class XXXActivity extends AppCompatActivity {
    ...
    @Override
    public void onBackPressed() {
        // 在全屏或者小窗口时按返回键要先退出全屏或小窗口,
        // 所以在Activity中onBackPress要交给NiceVideoPlayer先处理。
        if (NiceVideoPlayerManager.instance().onBackPressd()) return;
        super.onBackPressed();
    }
    ...
}

同时在Fragment中的onStop方法中释放播放器:

public class XXXFragenment extends Fragment {
    ...
    @Override
    public void onStop() {
        super.onStop();
        NiceVideoPlayerManager.instance().releaseNiceVideoPlayer();
    }
    ...
}

详细可参考demo中的UseInFragActivityDemoFragment.

3.切换清晰度

如果需要切换清晰度,需要在controller中配置清晰度相关的等级和视频链接地址:

private void init() {
    mNiceVideoPlayer = (NiceVideoPlayer) findViewById(R.id.nice_video_player);
    mNiceVideoPlayer.setPlayerType(NiceVideoPlayer.TYPE_IJK); // IjkPlayer or MediaPlayer
    TxVideoPlayerController controller = new TxVideoPlayerController(this);
    controller.setTitle(mTitle);
    controller.setClarity(getClarites(), 0);    // 设置清晰度以及默认播放的清晰度
    Glide.with(this)
            .load(mImageUrl)
            .placeholder(R.drawable.img_default)
            .crossFade()
            .into(controller.imageView());
    mNiceVideoPlayer.setController(controller);
}

public List<Clarity> getClarites() {
    List<Clarity> clarities = new ArrayList<>();
    clarities.add(new Clarity("标清", "270P", "http://play.g3proxy.lecloud.com/vod/v2/MjUxLzE2LzgvbGV0di11dHMvMTQvdmVyXzAwXzIyLTExMDc2NDEzODctYXZjLTE5OTgxOS1hYWMtNDgwMDAtNTI2MTEwLTE3MDg3NjEzLWY1OGY2YzM1NjkwZTA2ZGFmYjg2MTVlYzc5MjEyZjU4LTE0OTg1NTc2ODY4MjMubXA0?b=259&mmsid=65565355&tm=1499247143&key=f0eadb4f30c404d49ff8ebad673d3742&platid=3&splatid=345&playid=0&tss=no&vtype=21&cvid=2026135183914&payff=0&pip=08cc52f8b09acd3eff8bf31688ddeced&format=0&sign=mb&dname=mobile&expect=1&tag=mobile&xformat=super"));
    clarities.add(new Clarity("高清", "480P", "http://play.g3proxy.lecloud.com/vod/v2/MjQ5LzM3LzIwL2xldHYtdXRzLzE0L3Zlcl8wMF8yMi0xMTA3NjQxMzkwLWF2Yy00MTk4MTAtYWFjLTQ4MDAwLTUyNjExMC0zMTU1NTY1Mi00ZmJjYzFkNzA1NWMyNDc4MDc5OTYxODg1N2RjNzEwMi0xNDk4NTU3OTYxNzQ4Lm1wNA==?b=479&mmsid=65565355&tm=1499247143&key=98c7e781f1145aba07cb0d6ec06f6c12&platid=3&splatid=345&playid=0&tss=no&vtype=13&cvid=2026135183914&payff=0&pip=08cc52f8b09acd3eff8bf31688ddeced&format=0&sign=mb&dname=mobile&expect=1&tag=mobile&xformat=super"));
    clarities.add(new Clarity("超清", "720P", "http://play.g3proxy.lecloud.com/vod/v2/MjQ5LzM3LzIwL2xldHYtdXRzLzE0L3Zlcl8wMF8yMi0xMTA3NjQxMzkwLWF2Yy00MTk4MTAtYWFjLTQ4MDAwLTUyNjExMC0zMTU1NTY1Mi00ZmJjYzFkNzA1NWMyNDc4MDc5OTYxODg1N2RjNzEwMi0xNDk4NTU3OTYxNzQ4Lm1wNA==?b=479&mmsid=65565355&tm=1499247143&key=98c7e781f1145aba07cb0d6ec06f6c12&platid=3&splatid=345&playid=0&tss=no&vtype=13&cvid=2026135183914&payff=0&pip=08cc52f8b09acd3eff8bf31688ddeced&format=0&sign=mb&dname=mobile&expect=1&tag=mobile&xformat=super"));
    clarities.add(new Clarity("蓝光", "1080P", "http://play.g3proxy.lecloud.com/vod/v2/MjQ5LzM3LzIwL2xldHYtdXRzLzE0L3Zlcl8wMF8yMi0xMTA3NjQxMzkwLWF2Yy00MTk4MTAtYWFjLTQ4MDAwLTUyNjExMC0zMTU1NTY1Mi00ZmJjYzFkNzA1NWMyNDc4MDc5OTYxODg1N2RjNzEwMi0xNDk4NTU3OTYxNzQ4Lm1wNA==?b=479&mmsid=65565355&tm=1499247143&key=98c7e781f1145aba07cb0d6ec06f6c12&platid=3&splatid=345&playid=0&tss=no&vtype=13&cvid=2026135183914&payff=0&pip=08cc52f8b09acd3eff8bf31688ddeced&format=0&sign=mb&dname=mobile&expect=1&tag=mobile&xformat=super"));
    return clarities;
}

详细参考demo中的ChangeClarityActivity

4.在RecyclerView列表中使用

在ReclerView列表中使用时需要监听itemView回收,以此释放掉对应的播放器

mRecyclerView.setRecyclerListener(new RecyclerView.RecyclerListener() {
    @Override
    public void onViewRecycled(RecyclerView.ViewHolder holder) {
        NiceVideoPlayer niceVideoPlayer = ((VideoViewHolder) holder).mVideoPlayer;
        if (niceVideoPlayer == NiceVideoPlayerManager.instance().getCurrentNiceVideoPlayer()) {
            NiceVideoPlayerManager.instance().releaseNiceVideoPlayer();
        }
    }
});

详细参考demo中的RecyclerViewActivity.

5.播放时Home键按下以及回到播放界面的处理

按照上面的做法,在onStop直接释放掉播放器,那么在播放时按下Home键播放器也会被释放掉,如果在此回到播放界面,播放器回到最初始的状态。如果需要在播放的时候按下Home键只是暂停播放器,重新回到播放界面时又继续播放,那么可以参考demo中的CompatHomeKeyActiivty,或者对应的Activity集成自CompatHomeKeyActiivty,详细参考demo中的ProcessHome1Activity。当然,如果是在Fragment中,参考CompatKeyFragment,或者继承自CompatKeyFragment(外层的Activity还是继承自AppCompat,并处理onBackPress),详细参考demo中的ProcessHome2Activity.

5.自定义控制界面

public class CustomController extends NiceVideoPlayerController {
    // 实现自己的控制界面
    ...
}

Proguard

-keep class tv.danmaku.ijk.media.player.**{*;}

Demo

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].