Giter Site home page Giter Site logo

jeffmony / playersdk Goto Github PK

View Code? Open in Web Editor NEW
137.0 3.0 32.0 107.74 MB

提供一个高效的播放器库,播放相关的优化和功能都会在这个项目中完成

License: Apache License 2.0

Java 83.50% CMake 0.22% Python 0.03% Shell 0.02% C 16.22%
playersdk exoplayer ijkplayer opengl videorender

playersdk's Introduction

PlayerSDK

提供一个高效的播放器库,播放相关的优化和功能都会在这个项目中完成

目前支持的功能

  • 支持ijkplayer 和 exoplayer 两种播放器
  • 支持进度条和seek功能
  • 支持二维码扫描网址功能
  • 支持循环播放的功能
  • 支持倍速的功能
  • 支持针对HLS Master视频的切换清晰度功能
  • 添加Player实例监控方法
  • 支持GLSurfaceView渲染视频
  • 播放时调整声音大小
  • 播放视频加水印

播放器渲染SDK

  • 可以支持MediaPlayer、ijkplayer、exoplayer接入外部的渲染工具,使用opengl渲染
  • 可以支持SurfaceView和TextureView
  • 可以添加贴纸
  • 可以调整清晰度
  • 可以调整亮度、对比度、色温、饱和度、颗粒度、锐度
  • 可以截图
  • 可以调整黑白滤镜
  • 可以添加滤镜

版本更新日志

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

implementation 'com.github.JeffMony:PlayerSDK:2.0.0'

播放时设置声音音量

这里的调整音量不是让用户操作按键,而是在播放过程中调整声音的振幅。

//将声音的振幅调整为原来的3倍
mPlayer.setSonicVolume(3f)

调整声音振幅使用Sonic库来实现。

Player实例监控

PlayerConfig config = new PlayerManager.Builder().setLimitCount(6).buildConfig();
PlayerManager.getInstance().initConfig(config);
PlayerManager.getInstance().addGlobalPlayerInstanceListener(mListener);

private IPlayerInstanceListener mListener = new IPlayerInstanceListener() {
    @Override
    public void onPlayerCount(int count) {
        LogUtils.e("onPlayerCount count=" + count);
    }

    @Override
    public void onExceedLimit() {
        LogUtils.e("onExceedLimit report info");
    }
};

设置player实例限制是6个,如果超过6个,那么可以上报信息

切换清晰度的接入

VideoInfoParserManager.getInstance().parseVideoInfo(mUrl, mVideoInfoCallback);

public interface IVideoInfoCallback {
  void onVideoType(String contentType, String name);
  void onMutipleVideo(List<M3U8Seg> urlList);
  void onFailed(Exception e);
}

在onMutipleVideo(List urlList)回调函数中会出现呈现的几个清晰度的片源

PlayerSDK接入文档

CommonPlayer mPlayer = new CommonPlayer(Context, PlayerType);
mPlayer.setLooping(mIsLooping);
mPlayer.setSurface(mSurface);
mPlayer.setOnPreparedListener(mPrepareListener);
mPlayer.setOnVideoSizeChangedListener(mSizeChangedListener);
mPlayer.prepareAsync();

设置接口层是IPlayer.java

demo示意图

播放视频加水印

欢迎关注我的公众号JeffMony,我会持续为你带来音视频---算法---Android---python 方面的知识分享

playersdk's People

Contributors

jeffmony avatar litianpeng avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

playersdk's Issues

空指针异常

.CommonPlayer.setSonicVolume(float)' on a null object reference

mPlayer = new SimpleExoPlayer.Builder(context).build();返回为null,Android9.0

m3u8资源 下载一部分片段后 .会生成proxy.m3u8

然后我去用这个proxy.m3u8去播放..但是当本地下载好的片段播完后 就不会继续播放了,就是停在网络片段那里 .我看代码 会走下面这段

// We can't seek inside the buffer, and so need to reset.
pendingResetPositionUs = positionUs;
loadingFinished = false;
mediaChunks.clear();
if (loader.isLoading()) {
  if (sampleQueuesBuilt) {
    // Discard as much as we can synchronously.
    for (SampleQueue sampleQueue : sampleQueues) {
      sampleQueue.discardToEnd();
    }
  }
  loader.cancelLoading();

demo工程打不开电视直播链接

播放地址:http://cntv.sbs/live?id=cctv1

运行demo,播放不了,报如下错误,请问是哪里问题,用VLC播放器或者阿里云播放器可以播放

2023-05-08 14:51:06.288 7689-7689/com.jeffmony.playerdemo W/ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@c895d9a
2023-05-08 14:51:06.317 7689-7689/com.jeffmony.playerdemo V/ViewRootImpl: The specified message queue synchronization barrier token has not been posted or has already been removed
2023-05-08 14:51:06.320 7689-7689/com.jeffmony.playerdemo D/OPDFontHInj: ViewRoot performTraversals. in com.jeffmony.playerdemo/com.jeffmony.playerdemo.PlayerActivity
2023-05-08 14:51:06.332 7689-7803/com.jeffmony.playerdemo D/DecorView: onWindowFocusChangedFromViewRoot hasFocus: true, DecorView@c06b6ab[PlayerActivity]
2023-05-08 14:51:06.341 7689-7689/com.jeffmony.playerdemo E/PlayerSDK: onPlayerCount count=1
2023-05-08 14:51:06.341 7689-7689/com.jeffmony.playerdemo I/IJKMEDIA: av_version_info: 089ea539
2023-05-08 14:51:06.341 7689-7689/com.jeffmony.playerdemo I/IJKMEDIA: ijk_version_info: 089ea539
2023-05-08 14:51:06.342 7689-7689/com.jeffmony.playerdemo D/tv.danmaku.ijk.media.player.IjkMediaPlayer: Couldn't open file on client side, trying server side
2023-05-08 14:51:06.342 7689-7689/com.jeffmony.playerdemo I/IJKMEDIA: ===== versions =====
2023-05-08 14:51:06.342 7689-7689/com.jeffmony.playerdemo I/IJKMEDIA: ijkplayer : 089ea539
2023-05-08 14:51:06.342 7689-7689/com.jeffmony.playerdemo I/IJKMEDIA: FFmpeg : 089ea539
2023-05-08 14:51:06.342 7689-7689/com.jeffmony.playerdemo I/IJKMEDIA: libavutil : 55.78.100
2023-05-08 14:51:06.342 7689-7689/com.jeffmony.playerdemo I/IJKMEDIA: libavcodec : 57.107.100
2023-05-08 14:51:06.342 7689-7689/com.jeffmony.playerdemo I/IJKMEDIA: libavformat : 57.83.100
2023-05-08 14:51:06.342 7689-7689/com.jeffmony.playerdemo I/IJKMEDIA: libswscale : 4.8.100
2023-05-08 14:51:06.342 7689-7689/com.jeffmony.playerdemo I/IJKMEDIA: libswresample: 2.9.100
2023-05-08 14:51:06.342 7689-7689/com.jeffmony.playerdemo I/IJKMEDIA: ===== options =====
2023-05-08 14:51:06.342 7689-7689/com.jeffmony.playerdemo I/IJKMEDIA: player-opts : mediacodec = 1
2023-05-08 14:51:06.342 7689-7689/com.jeffmony.playerdemo I/IJKMEDIA: player-opts : opensles = 0
2023-05-08 14:51:06.342 7689-7689/com.jeffmony.playerdemo I/IJKMEDIA: player-opts : overlay-format = 842225234
2023-05-08 14:51:06.342 7689-7689/com.jeffmony.playerdemo I/IJKMEDIA: player-opts : framedrop = 1
2023-05-08 14:51:06.342 7689-7689/com.jeffmony.playerdemo I/IJKMEDIA: player-opts : start-on-prepared = 0
2023-05-08 14:51:06.342 7689-7689/com.jeffmony.playerdemo I/IJKMEDIA: player-opts : loop = 1
2023-05-08 14:51:06.342 7689-7689/com.jeffmony.playerdemo I/IJKMEDIA: format-opts : ijkapplication = 543679614304
2023-05-08 14:51:06.342 7689-7689/com.jeffmony.playerdemo I/IJKMEDIA: format-opts : ijkiomanager = 543685754752
2023-05-08 14:51:06.342 7689-7689/com.jeffmony.playerdemo I/IJKMEDIA: format-opts : http-detect-range-support = 0
2023-05-08 14:51:06.342 7689-7689/com.jeffmony.playerdemo I/IJKMEDIA: format-opts : timeout = 10000000
2023-05-08 14:51:06.342 7689-7689/com.jeffmony.playerdemo I/IJKMEDIA: format-opts : reconnect = 1
2023-05-08 14:51:06.342 7689-7689/com.jeffmony.playerdemo I/IJKMEDIA: codec-opts : skip_loop_filter = 48
2023-05-08 14:51:06.342 7689-7689/com.jeffmony.playerdemo I/IJKMEDIA: ===================
2023-05-08 14:51:06.343 7689-7958/com.jeffmony.playerdemo I/tv.danmaku.ijk.media.player.IjkMediaPlayer: onNativeInvoke 1
2023-05-08 14:51:06.343 7689-7958/com.jeffmony.playerdemo I/IJKMEDIA: Hit DNS cache hostname = cntv.sbs
2023-05-08 14:51:06.343 7689-7958/com.jeffmony.playerdemo I/tv.danmaku.ijk.media.player.IjkMediaPlayer: onNativeInvoke 131073
2023-05-08 14:51:06.347 7689-7689/com.jeffmony.playerdemo W/Choreographer: Already have a pending vsync event. There should only be one at a time.
2023-05-08 14:51:06.392 7689-7958/com.jeffmony.playerdemo I/tv.danmaku.ijk.media.player.IjkMediaPlayer: onNativeInvoke 131074
2023-05-08 14:51:06.443 7689-7958/com.jeffmony.playerdemo I/tv.danmaku.ijk.media.player.IjkMediaPlayer: onNativeInvoke 2
2023-05-08 14:51:06.443 7689-7958/com.jeffmony.playerdemo E/IJKMEDIA: Stream ends prematurely at 45, should be 18446744073709551615
2023-05-08 14:51:06.443 7689-7958/com.jeffmony.playerdemo E/IJKMEDIA: http://cntv.sbs/live?id=cctv1: I/O error
2023-05-08 14:51:06.444 7689-7689/com.jeffmony.playerdemo E/tv.danmaku.ijk.media.player.IjkMediaPlayer: Error (-10000,0)
2023-05-08 14:51:06.537 7689-7949/com.jeffmony.playerdemo E/PlayerSDK: onMutipleVideo : size=0

如何自定义加密的mp4播放

请教一下,再使用的过程中,我这边,打算读取一个文件,是由mp4文件再2进制数据中参杂了一定算法的乱码数据。打算再播放中,手动通过代码,对这些数据进行,跳过。

研究下来,我这边通过添加exoplayer的Extractors能够参与到该文件读取的处理中,但是接下来的处理,总是出现了ArrayIndexOutException,能否指点一下

RTSP

H265 RTSP不能播放

请问关于一个页面播放两个视频如何设置

作者你好,我想请问一下,我们现在app有个需求, 要在一个页面上显示两个或两个以上的视频,播放rtsp的摄像头视频,但是最多只能放一个, 其它的就播放不出来, 我试了你的demo, 也是这样

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.