Code Monkey home page Code Monkey logo

carguo / gsyvideoplayer Goto Github PK

View Code? Open in Web Editor NEW
19.7K 429.0 4.1K 325.79 MB

视频播放器(IJKplayer、ExoPlayer、MediaPlayer),HTTPS,支持弹幕,外挂字幕,支持滤镜、水印、gif截图,片头广告、中间广告,多个同时播放,支持基本的拖动,声音、亮度调节,支持边播边缓存,支持视频自带rotation的旋转(90,270之类),重力旋转与手动旋转的同步支持,支持列表播放 ,列表全屏动画,视频加载速度,列表小窗口支持拖动,动画效果,调整比例,多分辨率切换,支持切换播放器,进度条小窗口预览,列表切换详情页面无缝播放,rtsp、concat、mpeg。

Home Page: https://juejin.im/user/582aca2ba22b9d006b59ae68/posts

License: Apache License 2.0

Java 97.87% Shell 2.13%
android video player ijkplayer ffmpeg exoplayer https videocache

gsyvideoplayer's Introduction

支持 IJKPlayerMedia3(EXOPlayer2)、MediaPlayer、AliPlayer,实现了多功能的视频播放器。 (请仔细阅读下方各项说明,大多数问题可在下方找到解答)。

类型 功能
缓存 边播边缓存,使用了AndroidVideoCache;Media3(ExoPlayer)使用SimpleCache。
协议 h263\4\5、Https、concat、rtsp、hls、rtmp、crypto、mpeg等等。(ijk模式格式支持)
滤镜 简单滤镜(马赛克、黑白、色彩过滤、高斯、模糊、模糊等等20多种)、动画、(水印、画面多重播放等)。
帧图 视频第一帧、视频帧截图功能,视频生成gif功能。
播放 列表播放、列表连续播放、重力旋转与手动旋转、视频本身rotation旋转属性、快播和慢播、网络视频加载速度。
画面 调整显示比例:默认、16:9、4:3、填充;播放时旋转画面角度(0,90,180,270);镜像旋转。
内核 IJKPlayer、Media3(EXOPlayer)、MediaPlayer、AliPlayer切换、自定义内核
布局 全屏与非全屏两套布局切换、没有任何操作控件的纯播放支持、弹幕功能、继承自定义任何布局。
播放 单例播放、多个同时播放、视频列表滑动自动播放、列表切换详情页面无缝播放。
窗口 小窗口、多窗体下(包括桌面)的小窗口播放。
广告 片头广告、跳过广告支持、中间插入广告功能。
字幕 media3(exo2)模式下支持自定增加外挂字幕
dash media3(exo2) 模式支持dash
stream 支持元数据播放
更多 暂停前后台切换不黑屏;调整不同清晰度的支持;无缝切换支持;锁定/解锁全屏点击功能;进度条小窗口预览(测试)。
自定义 可自定义渲染层、自定义管理层、自定义播放层(控制层)、自定义缓存层。

Build Status Github Actions

GitHub stars GitHub forks GitHub issues GitHub license

公众号 掘金 知乎 CSDN 简书
GSYTech 点我 点我 点我 点我

一、使用依赖

1、Jitpack 引入方法(推荐, JCenter 即将关闭)

First、在project下的build.gradle添加

allprojects {
    repositories {
		...
        maven { url 'https://jitpack.io' }
        maven { url "https://maven.aliyun.com/repository/public" }
    }
}

你可以选择下面三种的其中一种,在module下的build.gradle添加。

A、直接引入

 //完整版引入
 implementation 'com.github.CarGuo.GSYVideoPlayer:GSYVideoPlayer:v8.6.0-release-jitpack'


 //是否需要AliPlayer模式
 implementation 'com.github.CarGuo.GSYVideoPlayer:GSYVideoPlayer-aliplay:v8.6.0-release-jitpack'

B、添加java和你想要的so支持:

 implementation 'com.github.CarGuo.GSYVideoPlayer:gsyVideoPlayer-java:v8.6.0-release-jitpack'

 //是否需要ExoPlayer模式
 implementation 'com.github.CarGuo.GSYVideoPlayer:GSYVideoPlayer-exo2:v8.6.0-release-jitpack'

 //是否需要AliPlayer模式
 implementation 'com.github.CarGuo.GSYVideoPlayer:GSYVideoPlayer-aliplay:v8.6.0-release-jitpack'

 //根据你的需求ijk模式的so
 implementation 'com.github.CarGuo.GSYVideoPlayer:gsyVideoPlayer-arm64:v8.6.0-release-jitpack'
 implementation 'com.github.CarGuo.GSYVideoPlayer:gsyVideoPlayer-armv7a:v8.6.0-release-jitpack'
 implementation 'com.github.CarGuo.GSYVideoPlayer:gsyVideoPlayer-armv5:v8.6.0-release-jitpack'
 implementation 'com.github.CarGuo.GSYVideoPlayer:gsyVideoPlayer-x86:v8.6.0-release-jitpack'
 implementation 'com.github.CarGuo.GSYVideoPlayer:gsyVideoPlayer-x64:v8.6.0-release-jitpack'

C、支持其他格式协议的(mpeg,rtsp, concat、crypto协议)

A、B普通版本支持263/264/265等,对于mpeg编码会有声音无画面情况。 C 引入的so支持mpeg编码和其他补充协议,但是so包相对变大。

 implementation 'com.github.CarGuo.GSYVideoPlayer:gsyVideoPlayer-java:v8.6.0-release-jitpack'

 //是否需要ExoPlayer模式
 implementation 'com.github.CarGuo.GSYVideoPlayer:GSYVideoPlayer-exo2:v8.6.0-release-jitpack'

 //是否需要AliPlayer模式
 implementation 'com.github.CarGuo.GSYVideoPlayer:GSYVideoPlayer-aliplay:v8.6.0-release-jitpack'

 //更多ijk的编码支持
 implementation 'com.github.CarGuo.GSYVideoPlayer:gsyVideoPlayer-ex_so:v8.6.0-release-jitpack'

代码中的全局切换支持(更多请参看下方文档和demo)


//EXOPlayer内核,支持格式更多
PlayerFactory.setPlayManager(Exo2PlayerManager.class);
//系统内核模式
PlayerFactory.setPlayManager(SystemPlayerManager.class);
//ijk内核,默认模式
PlayerFactory.setPlayManager(IjkPlayerManager.class);
//aliplay 内核,默认模式
PlayerFactory.setPlayManager(AliPlayerManager.class);


//exo缓存模式,支持m3u8,只支持exo
CacheFactory.setCacheManager(ExoPlayerCacheManager.class);
//代理缓存模式,支持所有模式,不支持m3u8等,默认
CacheFactory.setCacheManager(ProxyCacheManager.class);



//切换渲染模式
GSYVideoType.setShowType(GSYVideoType.SCREEN_MATCH_FULL);
//默认显示比例
GSYVideoType.SCREEN_TYPE_DEFAULT = 0;
//16:9
GSYVideoType.SCREEN_TYPE_16_9 = 1;
//4:3
GSYVideoType.SCREEN_TYPE_4_3 = 2;
//全屏裁减显示,为了显示正常 CoverImageView 建议使用FrameLayout作为父布局
GSYVideoType.SCREEN_TYPE_FULL = 4;
//全屏拉伸显示,使用这个属性时,surface_container建议使用FrameLayout
GSYVideoType.SCREEN_MATCH_FULL = -4;
/***
 * SCREEN_TYPE_CUSTOM 下自定义显示比例
 * @param screenScaleRatio  高宽比,如 16:9
 */
public static void setScreenScaleRatio(float screenScaleRatio)


//切换绘制模式
GSYVideoType.setRenderType(GSYVideoType.SUFRACE);
GSYVideoType.setRenderType(GSYVideoType.GLSURFACE);
GSYVideoType.setRenderType(GSYVideoType.TEXTURE);


//ijk关闭log
IjkPlayerManager.setLogLevel(IjkMediaPlayer.IJK_LOG_SILENT);


//exoplayer自定义MediaSource
ExoSourceManager.setExoMediaSourceInterceptListener(new ExoMediaSourceInterceptListener() {
    @Override
    public MediaSource getMediaSource(String dataSource, boolean preview, boolean cacheEnable, boolean isLooping, File cacheDir) {
        //可自定义MediaSource
        return null;
    }
});

二、其他推荐

* 我所在的技术社区:掘金

* QQ群,有兴趣的欢迎(平时吹水吐槽多,因为人数饱和,就是日常瞎扯,没人解决问题的):174815284 。

三、文档Wiki

文档 传送门
使用说明 --- 简单使用,快速上手文档
建议阅读 --- 移动开发者必知的音视频基础知识1--- 移动开发者必知的音视频基础知识2
项目解析说明 --- 项目解析说明、包含项目架构和解析
接口文档入口 --- 使用说明、接口文档 - 入口
问题集锦入口 --- 问题集锦 - 入口(大部分你遇到的问题都在这里解决)
编码格式 --- IJK so文件配置格式说明
编译自定义SO --- IJKPlayer编译自定义SO - 入口
版本更新说明 --- 版本更新说明 - 入口
compileSdk 太高 --- #3514

框架图

四、运行效果

  • 1、打开一个播放(旋转、镜像、填充)

  • 2、列表/详情模式(动画、旋转、小窗体)

  • 3、弹幕

  • 4、滤镜和GL动画

  • 6、背景铺满模糊播放

  • 7、进度条小窗口预览

五、近期版本

v8.6.0-release-jitpack (2024-03-07)

  • update media 1.3.0
  • update exo source intercept listener
  • fix #3900

v8.5.0-release-jitpack (2023-11-20)

  • update media 1.2.0 & compileSdk 34
  • update exoplayer to androidx media
  • fix #3874
  • fix issues 3855 (#3856)
  • add #3843

v8.4.0-release-jitpack (2023-07-17)

  • update exoplayer to androidx media
  • fix #3824 with ExoPlaybackException
  • update aliyun sdk version
  • fix AGP8
  • support exoplayer file sink
  • fix #3798

更多版本请查阅:版本更新说明

六、关于Issues

提问题前可先查阅上方文档和说明,请在Demo中复现问题。

问题说明:

1、说明那个Demo中哪个页面。
2、问题显现和重现步骤。
3、补充问题的视频流url,截图。
4、补充问题的机型,android版本。

七、混淆

-keep class com.shuyu.gsyvideoplayer.video.** { *; }
-dontwarn com.shuyu.gsyvideoplayer.video.**
-keep class com.shuyu.gsyvideoplayer.video.base.** { *; }
-dontwarn com.shuyu.gsyvideoplayer.video.base.**
-keep class com.shuyu.gsyvideoplayer.utils.** { *; }
-dontwarn com.shuyu.gsyvideoplayer.utils.**
-keep class com.shuyu.gsyvideoplayer.player.** {*;}
-dontwarn com.shuyu.gsyvideoplayer.player.**
-keep class tv.danmaku.ijk.** { *; }
-dontwarn tv.danmaku.ijk.**
-keep class androidx.media3.** {*;}
-keep interface androidx.media3.**

-keep class com.shuyu.alipay.** {*;}
-keep interface com.shuyu.alipay.**

-keep public class * extends android.view.View{
    *** get*();
    void set*(***);
    public <init>(android.content.Context);
    public <init>(android.content.Context, java.lang.Boolean);
    public <init>(android.content.Context, android.util.AttributeSet);
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

如果是阿里云播放器,可以参考它的文档( https://help.aliyun.com/document_detail/124711.html?spm=a2c4g.124711.0.0.7fa0125dkwUPoU ),需要新增一些 keep 规则:

-keep class com.alivc.**{*;}
-keep class com.aliyun.**{*;}
-keep class com.cicada.**{*;}
-dontwarn com.alivc.**
-dontwarn com.aliyun.**
-dontwarn com.cicada.**

温馨提示

关于自定义和出现问题的请先看问题集锦、demo、issue。

多了解一些音视频的基础常识,对容器,音视频编码,ffmpeg先做一些了解,以及mediacodec等的不同。
尽量少出现为什么别的能播的问题哟。

播放器的可自定义还是挺高的,定制请参考demo,多看源码。现在的功能有些多,demo也在不断的更新。

一些新功能和项目结构也在不断的调整。

欢迎提出问题,谢谢。

依赖大小参考

建议使用ndk过滤,详细参考 参考第四条 : 4、NDK的so支持

Star History Chart

Star History Chart

非常感谢您的支持

撸码不易,如果对你有所帮助,欢迎您的赞赏

License

请参看IJKPlayer和AndroidVideoCache相关协议。
项目最开始是从jiecao过来的,改着改着直接重构了。
偶尔有一变量和方法名可能还有点jiaozi的影子,但是基本是一个新项目。

gsyvideoplayer's People

Contributors

carguo avatar carguosmall avatar dendrocyte avatar equationl avatar ernest-su avatar feicien avatar fenghebaiyang avatar goooler avatar gouzhong1223 avatar haohaozaici avatar hynsn avatar interneted avatar julywind avatar monsterlin avatar phxnirvana avatar puredark avatar rosuh avatar smartvive avatar testsmirk avatar wangrunxiang avatar xiangbill avatar yunfeit 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  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

gsyvideoplayer's Issues

开放接口控制播放暂停

我想实现预览播放几秒后进行暂停播放以实现所需要的接口,我通过增加一个当前播放时间的监听接口,能否提供封装好的接口已实现播放和暂停操作。

setUp()方法

5ab8f3fc-4590-4d83-9aca-709262ce54ee
如上图,我在setUp()方法里,加了一些我自己的业务进去。这些业务在播放器竖屏下是没有问题的,但点击全屏时,这些业务不见了。我需要做什么处理?

全屏调整亮度问题

第一个单独的例子中,全屏调整亮度,调整到百分百了,然后松手又复位了,未保存亮度状态。再次向上滑动亮度又是从百分之60左右开始的。

你好,能做一个连续播放的demo吗

我现在有个需求,就是在监听到当前视频播放完成后,自动开始播list里的下一个视频,我自己写了点代码试了这个功能,但是发现播放到第二个视频的时候,只有声音,播放界面是黑的,不知道怎么回事

请问,判断全屏的问题或者是拿到当前的videoPlayer对象问题。

我现在在MainActivity中有几个fragment,第一个fragment中一个RecyclerView,这里面的一个列表中有一个视频播放,切换fragment怎么暂停视频播放?
还有在MainActivity的返回事件中怎么判断是不是需要播放器返回?
另外就是第一个fragment按Home按钮到后台,再换到前台,如何做暂停和播放动作?
最后就是ListVideo2Activity中如果换成RecyclerView在小窗口出来的时候回卡一下,没有listView流畅。

二次开发得非常好

经过你的二次开发,比节操播放器好用多了,而且功能还比节操播放器多了不少。节操播放器公开的API太少,而且wiki实在有点少

UnsatisfiedLinkError

java.lang.UnsatisfiedLinkError: dlopen failed: /data/app/com.example.gsyvideoplayer-1/lib/x86/libijkffmpeg.so: has text relocations
at java.lang.Runtime.loadLibrary(Runtime.java:372)
at java.lang.System.loadLibrary(System.java:1076)
at tv.danmaku.ijk.media.player.IjkMediaPlayer$1.loadLibrary(IjkMediaPlayer.java:163)
at tv.danmaku.ijk.media.player.IjkMediaPlayer.loadLibrariesOnce(IjkMediaPlayer.java:174)
at tv.danmaku.ijk.media.player.IjkMediaPlayer.initPlayer(IjkMediaPlayer.java:215)
at tv.danmaku.ijk.media.player.IjkMediaPlayer.(IjkMediaPlayer.java:211)
at tv.danmaku.ijk.media.player.IjkMediaPlayer.(IjkMediaPlayer.java:202)
at com.shuyu.gsyvideoplayer.GSYVideoManager.(GSYVideoManager.java:207)
at com.shuyu.gsyvideoplayer.GSYVideoManager.instance(GSYVideoManager.java:87)
at com.shuyu.gsyvideoplayer.GSYVideoPlayer.isCurrentMediaListener(GSYVideoPlayer.java:1068)
at com.shuyu.gsyvideoplayer.GSYVideoPlayer.setUp(GSYVideoPlayer.java:230)
at com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer.setUp(StandardGSYVideoPlayer.java:200)
at com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer.setUp(StandardGSYVideoPlayer.java:186)
at com.example.gsyvideoplayer.video.SampleVideo.setUp(SampleVideo.java:120)
at com.example.gsyvideoplayer.PlayActivity.init(PlayActivity.java:74)
at com.example.gsyvideoplayer.PlayActivity.onCreate(PlayActivity.java:53)
at android.app.Activity.performCreate(Activity.java:6237)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
12-23 12:43:44.594 28391-28399/com.example.gsyvideoplayer E/art: No implementation found for void tv.danmaku.ijk.media.player.IjkMediaPlayer.native_finalize() (tried Java_tv_danmaku_ijk_media_player_IjkMediaPlayer_native_1finalize and Java_tv_danmaku_ijk_media_player_IjkMediaPlayer_native_1finalize__)
12-23 12:43:44.595 28391-28399/com.example.gsyvideoplayer E/System: Uncaught exception thrown by finalizer
12-23 12:43:44.595 28391-28399/com.example.gsyvideoplayer E/System: java.lang.UnsatisfiedLinkError: No implementation found for void tv.danmaku.ijk.media.player.IjkMediaPlayer.native_finalize() (tried Java_tv_danmaku_ijk_media_player_IjkMediaPlayer_native_1finalize and Java_tv_danmaku_ijk_media_player_IjkMediaPlayer_native_1finalize__)
at tv.danmaku.ijk.media.player.IjkMediaPlayer.native_finalize(Native Method)
at tv.danmaku.ijk.media.player.IjkMediaPlayer.finalize(IjkMediaPlayer.java:893)
at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:202)
at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:185)
at java.lang.Thread.run(Thread.java:818)

HttpProxyCacheServer error com.danikula.videocache.ProxyCacheException

播放这个链接

http://120.25.226.186:32812/resources/videos/minion_01.mp4
报了这个异常。

HttpProxyCacheServer error com.danikula.videocache.ProxyCacheException: Error closing socket output stream at com.danikula.videocache.HttpProxyCacheServer.closeSocketOutput(HttpProxyCacheServer.java:294) at com.danikula.videocache.HttpProxyCacheServer.releaseSocket(HttpProxyCacheServer.java:270) at com.danikula.videocache.HttpProxyCacheServer.processSocket(HttpProxyCacheServer.java:242) at com.danikula.videocache.HttpProxyCacheServer.access$200(HttpProxyCacheServer.java:52) at com.danikula.videocache.HttpProxyCacheServer$SocketProcessorRunnable.run(HttpProxyCacheServer.java:337) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:818) Caused by: java.net.SocketException: shutdown failed: ENOTCONN (Transport endpoint is not connected) at java.net.PlainSocketImpl.shutdownOutput(PlainSocketImpl.java:377) at java.net.Socket.shutdownOutput(Socket.java:652) at com.danikula.videocache.HttpProxyCacheServer.closeSocketOutput(HttpProxyCacheServer.java:291) at com.danikula.videocache.HttpProxyCacheServer.releaseSocket(HttpProxyCacheServer.java:270)  at com.danikula.videocache.HttpProxyCacheServer.processSocket(HttpProxyCacheServer.java:242)  at com.danikula.videocache.HttpProxyCacheServer.access$200(HttpProxyCacheServer.java:52)  at com.danikula.videocache.HttpProxyCacheServer$SocketProcessorRunnable.run(HttpProxyCacheServer.java:337)  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)  at java.util.concurrent.FutureTask.run(FutureTask.java:237)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)  at java.lang.Thread.run(Thread.java:818)  Caused by: android.system.ErrnoException: shutdown failed: ENOTCONN (Transport endpoint is not connected) at libcore.io.Posix.shutdown(Native Method) at libcore.io.ForwardingOs.shutdown(ForwardingOs.java:149) at java.net.PlainSocketImpl.shutdownOutput(PlainSocketImpl.java:375) at java.net.Socket.shutdownOutput(Socket.java:652)  at com.danikula.videocache.HttpProxyCacheServer.closeSocketOutput(HttpProxyCacheServer.java:291)  at com.danikula.videocache.HttpProxyCacheServer.releaseSocket(HttpProxyCacheServer.java:270)  at com.danikula.videocache.HttpProxyCacheServer.processSocket(HttpProxyCacheServer.java:242)  at com.danikula.videocache.HttpProxyCacheServer.access$200(HttpProxyCacheServer.java:52)  at com.danikula.videocache.HttpProxyCacheServer$SocketProcessorRunnable.run(HttpProxyCacheServer.java:337)  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)  at java.util.concurrent.FutureTask.run(FutureTask.java:237)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)  at java.lang.Thread.run(Thread.java:818) 

土豆解析出来的m3u8地址播放不了。。。

视频地址:http://vr.tudou.com/v2proxy/v2.m3u8?it=249426936&st=3&pw=
苹果端可以直接播放。。求助大神。
LOG:
01-19 16:25:14.030 12771-13395/com.rmj.asmr D/IJKMEDIA: IjkMediaPlayer_release
01-19 16:25:14.030 12771-13395/com.rmj.asmr D/IJKMEDIA: IjkMediaPlayer_setVolume
01-19 16:25:14.031 12771-13395/com.rmj.asmr D/IJKMEDIA: IjkMediaPlayer_setVideoSurface
01-19 16:25:14.035 12771-13395/com.rmj.asmr D/IJKMEDIA: IjkMediaPlayer_release
01-19 16:25:14.035 12771-13395/com.rmj.asmr D/IJKMEDIA: IjkMediaPlayer_native_setup
01-19 16:25:14.035 12771-13395/com.rmj.asmr I/IJKMEDIA: av_version_info: ff3.2--ijk0.7.5--20161205--001
01-19 16:25:14.035 12771-13395/com.rmj.asmr I/IJKMEDIA: ijk_version_info: k0.7.5-21-gaffc5fd
01-19 16:25:14.035 12771-13395/com.rmj.asmr D/IJKMEDIA: ffpipeline_create_from_android()
01-19 16:25:14.035 12771-13395/com.rmj.asmr D/IJKMEDIA: ijkmp_set_inject_opaque(0x1008a6)
01-19 16:25:14.035 12771-13395/com.rmj.asmr D/IJKMEDIA: ijkmp_set_inject_opaque()=void
01-19 16:25:14.035 12771-13395/com.rmj.asmr D/IJKMEDIA: ijkmp_android_set_mediacodec_select_callback()
01-19 16:25:14.035 12771-13395/com.rmj.asmr D/IJKMEDIA: ffpipeline_set_mediacodec_select_callback
01-19 16:25:14.035 12771-13395/com.rmj.asmr D/IJKMEDIA: ijkmp_android_set_mediacodec_select_callback()=void
01-19 16:25:14.035 12771-13395/com.rmj.asmr D/IJKMEDIA: IjkMediaPlayer_setDataSourceAndHeaders
01-19 16:25:14.035 12771-13395/com.rmj.asmr V/IJKMEDIA: setDataSource: path http://vr.tudou.com/v2proxy/v2.m3u8?it=249426936&st=3&pw=
01-19 16:25:14.035 12771-13395/com.rmj.asmr D/IJKMEDIA: ijkmp_set_data_source(url="http://vr.tudou.com/v2proxy/v2.m3u8?it=249426936&st=3&pw=")
01-19 16:25:14.036 12771-13395/com.rmj.asmr D/IJKMEDIA: ijkmp_set_data_source(url="http://vr.tudou.com/v2proxy/v2.m3u8?it=249426936&st=3&pw=")=0
01-19 16:25:14.036 12771-13395/com.rmj.asmr D/IJKMEDIA: IjkMediaPlayer_setOptionLong
01-19 16:25:14.036 12771-13395/com.rmj.asmr D/IJKMEDIA: IjkMediaPlayer_setLoopCount
01-19 16:25:14.036 12771-13395/com.rmj.asmr D/IJKMEDIA: IjkMediaPlayer_setVolume
01-19 16:25:14.036 12771-13395/com.rmj.asmr D/IJKMEDIA: ijkmp_android_set_volume(1.000000, 1.000000)
01-19 16:25:14.036 12771-13395/com.rmj.asmr D/IJKMEDIA: ffpipeline_set_volume
01-19 16:25:14.036 12771-13395/com.rmj.asmr D/IJKMEDIA: ijkmp_android_set_volume(1.000000, 1.000000)=void
01-19 16:25:14.036 12771-13395/com.rmj.asmr W/tv.danmaku.ijk.media.player.IjkMediaPlayer: setScreenOnWhilePlaying(true) is ineffective without a SurfaceHolder
01-19 16:25:14.036 12771-13395/com.rmj.asmr D/IJKMEDIA: IjkMediaPlayer_prepareAsync
01-19 16:25:14.036 12771-13395/com.rmj.asmr D/IJKMEDIA: ijkmp_prepare_async()
01-19 16:25:14.036 12771-13395/com.rmj.asmr I/IJKMEDIA: ===== versions =====
01-19 16:25:14.036 12771-13395/com.rmj.asmr I/IJKMEDIA: ijkplayer : k0.7.5-21-gaffc5fd
01-19 16:25:14.036 12771-13395/com.rmj.asmr I/IJKMEDIA: FFmpeg : ff3.2--ijk0.7.5--20161205--001
01-19 16:25:14.036 12771-13395/com.rmj.asmr I/IJKMEDIA: libavutil : 55.34.100
01-19 16:25:14.036 12771-13395/com.rmj.asmr I/IJKMEDIA: libavcodec : 57.64.100
01-19 16:25:14.036 12771-13395/com.rmj.asmr I/IJKMEDIA: libavformat : 57.56.100
01-19 16:25:14.036 12771-13395/com.rmj.asmr I/IJKMEDIA: libswscale : 4.2.100
01-19 16:25:14.036 12771-13395/com.rmj.asmr I/IJKMEDIA: libswresample: 2.3.100
01-19 16:25:14.036 12771-13395/com.rmj.asmr I/IJKMEDIA: ===== options =====
01-19 16:25:14.036 12771-13395/com.rmj.asmr I/IJKMEDIA: player-opts : loop = 1
01-19 16:25:14.036 12771-13395/com.rmj.asmr I/IJKMEDIA: format-opts : ijkapplication = 547721374816
01-19 16:25:14.036 12771-13395/com.rmj.asmr I/IJKMEDIA: ===================
01-19 16:25:14.037 12771-13395/com.rmj.asmr D/IJKMEDIA: ijkmp_prepare_async()=0
01-19 16:25:14.037 12771-14191/com.rmj.asmr I/IJKMEDIA: SDL_RunThread: [14191] ff_msg_loop
01-19 16:25:14.037 12771-14191/com.rmj.asmr D/IJKMEDIA: message_loop
01-19 16:25:14.038 12771-14191/com.rmj.asmr D/IJKMEDIA: FFP_MSG_FLUSH:
01-19 16:25:14.038 12771-14192/com.rmj.asmr I/IJKMEDIA: SDL_RunThread: [14192] ff_vout
01-19 16:25:14.038 12771-14193/com.rmj.asmr I/IJKMEDIA: SDL_RunThread: [14193] ff_read
01-19 16:25:14.040 12771-14193/com.rmj.asmr I/tv.danmaku.ijk.media.player.IjkMediaPlayer: onNativeInvoke 1
01-19 16:25:14.043 12771-13395/com.rmj.asmr W/tv.danmaku.ijk.media.player.IjkMediaPlayer: setScreenOnWhilePlaying(true) is ineffective for Surface
01-19 16:25:14.043 12771-13395/com.rmj.asmr D/IJKMEDIA: IjkMediaPlayer_setVideoSurface
01-19 16:25:14.043 12771-14193/com.rmj.asmr I/tv.danmaku.ijk.media.player.IjkMediaPlayer: onNativeInvoke 131073
01-19 16:25:14.043 12771-13395/com.rmj.asmr D/IJKMEDIA: ijkmp_set_android_surface(surface=0x7f82dfdbb8)
01-19 16:25:14.043 12771-13395/com.rmj.asmr D/IJKMEDIA: ffpipeline_set_surface()
01-19 16:25:14.043 12771-13395/com.rmj.asmr D/IJKMEDIA: ijkmp_set_android_surface(surface=0x7f82dfdbb8)=void
01-19 16:25:14.061 12771-14193/com.rmj.asmr I/tv.danmaku.ijk.media.player.IjkMediaPlayer: onNativeInvoke 131074
01-19 16:25:14.074 12771-14193/com.rmj.asmr W/IJKMEDIA: HTTP error 403 Forbidden
01-19 16:25:14.074 12771-14193/com.rmj.asmr I/tv.danmaku.ijk.media.player.IjkMediaPlayer: onNativeInvoke 2
01-19 16:25:14.074 12771-14193/com.rmj.asmr E/IJKMEDIA: http://vr.tudou.com/v2proxy/v2.m3u8?it=249426936&st=3&pw=: Server returned 403 Forbidden (access denied)
01-19 16:25:14.074 12771-14193/com.rmj.asmr I/IJKMEDIA: SDL_JNI_DetachThreadEnv: [14193]
01-19 16:25:14.074 12771-14191/com.rmj.asmr D/IJKMEDIA: FFP_MSG_ERROR: 0
01-19 16:25:14.075 12771-13395/com.rmj.asmr E/tv.danmaku.ijk.media.player.IjkMediaPlayer: Error (-10000,0)
01-19 16:25:14.075 12771-13395/com.rmj.asmr D/IJKMEDIA: IjkMediaPlayer_release
01-19 16:25:14.075 12771-13395/com.rmj.asmr D/IJKMEDIA: ijkmp_set_android_surface(surface=0x0)
01-19 16:25:14.075 12771-13395/com.rmj.asmr D/IJKMEDIA: ffpipeline_set_surface()
01-19 16:25:14.075 12771-13395/com.rmj.asmr D/IJKMEDIA: ijkmp_set_android_surface(surface=0x0)=void
01-19 16:25:14.075 12771-13395/com.rmj.asmr D/IJKMEDIA: ijkmp_shutdown_l()
01-19 16:25:14.075 12771-14191/com.rmj.asmr D/IJKMEDIA: message_loop exit
01-19 16:25:14.075 12771-14191/com.rmj.asmr I/IJKMEDIA: SDL_JNI_DetachThreadEnv: [14191]
01-19 16:25:14.079 12771-14192/com.rmj.asmr I/IJKMEDIA: SDL_JNI_DetachThreadEnv: [14192]
01-19 16:25:14.079 12771-13395/com.rmj.asmr D/IJKMEDIA: ijkmp_shutdown_l()=void
01-19 16:25:14.079 12771-13395/com.rmj.asmr D/IJKMEDIA: ijkmp_dec_ref(): ref=0
01-19 16:25:14.079 12771-13395/com.rmj.asmr D/IJKMEDIA: ijkmp_shutdown_l()
01-19 16:25:14.079 12771-13395/com.rmj.asmr D/IJKMEDIA: ijkmp_shutdown_l()=void
01-19 16:25:14.079 12771-13395/com.rmj.asmr D/IJKMEDIA: IjkMediaPlayer_setVolume

视频缓冲问题

视频缓冲时,如果触碰了播放界面,加载动画就停止了

startWindowFullscreen()方法

c9e4e123-cd4b-403a-b770-c884f3be026f
如上图,我重写了startWindowFullscreen,但是全屏时,没有接着横屏的时间点播放。这个怎么搞?

fork过来安装缺少这个方法

D:\Administrator\Github\GSYVideoPlayer\gsyVideoPlayer\src\main\java\com\shuyu\gsyvideoplayer\GSYVideoPlayer.java
Error:(1191, 63) 错误: 找不到符号
符号: 方法 getTcpSpeed()
位置: 类 IjkMediaPlayer

java.lang.UnsatisfiedLinkError: Cannot load library: find_library[1201]: 163 'libijksdl.so' failed to load previously

4.1 至4.3会出现这个问题
FATAL EXCEPTION: main
java.lang.UnsatisfiedLinkError: Cannot load library: find_library[1201]: 163 'libijksdl.so' failed to load previously
at java.lang.Runtime.loadLibrary(Runtime.java:370)
at java.lang.System.loadLibrary(System.java:535)
at tv.danmaku.ijk.media.player.IjkMediaPlayer$1.loadLibrary(IjkMediaPlayer.java:163)
at tv.danmaku.ijk.media.player.IjkMediaPlayer.loadLibrariesOnce(IjkMediaPlayer.java:175)
at tv.danmaku.ijk.media.player.IjkMediaPlayer.initPlayer(IjkMediaPlayer.java:215)
at tv.danmaku.ijk.media.player.IjkMediaPlayer.(IjkMediaPlayer.java:211)
at tv.danmaku.ijk.media.player.IjkMediaPlayer.(IjkMediaPlayer.java:202)
at com.shuyu.gsyvideoplayer.GSYVideoManager.(GSYVideoManager.java:189)
at com.shuyu.gsyvideoplayer.GSYVideoManager.instance(GSYVideoManager.java:69)
at com.shuyu.gsyvideoplayer.GSYVideoPlayer.isCurrentMediaListener(GSYVideoPlayer.java:1046)
at com.shuyu.gsyvideoplayer.GSYVideoPlayer.setUp(GSYVideoPlayer.java:244)
at com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer.setUp(StandardGSYVideoPlayer.java:146)
at com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer.setUp(StandardGSYVideoPlayer.java:141)
at com.hutchind.cordova.plugins.streamingmedia.PlayActivity.init(PlayActivity.java:75)
at com.hutchind.cordova.plugins.streamingmedia.PlayActivity.onCreate(PlayActivity.java:60)
at android.app.Activity.performCreate(Activity.java:5203)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2078)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2139)
at android.app.ActivityThread.access$700(ActivityThread.java:143)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1241)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4960)

onPlayError()方法

我需要在报错时,取到报错的当前播放时间点。能否可以取到?

播放器偶然出现IllegalStateException异常

at tv.danmaku.ijk.media.player.IjkMediaPlayer._pause(Native Method)
W/System.err( 3111): at tv.danmaku.ijk.media.player.IjkMediaPlayer.pause(IjkMediaPlayer.java:514)
W/System.err( 3111): at com.shuyu.gsyvideoplayer.GSYVideoPlayer.onVideoPause(GSYVideoPlayer.java:432)

红米note2,3 报错..

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.apps.android.news.news-2/base.apk"],nativeLibraryDirectories=[/data/app/com.apps.android.news.news-2/lib/arm64, /vendor/lib64, /system/lib64]]] couldn't find "libijkffmpeg.so"
at java.lang.Runtime.loadLibrary(Runtime.java:366)
at java.lang.System.loadLibrary(System.java:988)
at tv.danmaku.ijk.media.player.IjkMediaPlayer$1.loadLibrary(IjkMediaPlayer.java:163)
at tv.danmaku.ijk.media.player.IjkMediaPlayer.loadLibrariesOnce(IjkMediaPlayer.java:174)
at tv.danmaku.ijk.media.player.IjkMediaPlayer.initPlayer(IjkMediaPlayer.java:215)
at tv.danmaku.ijk.media.player.IjkMediaPlayer.(IjkMediaPlayer.java:211)
at tv.danmaku.ijk.media.player.IjkMediaPlayer.(IjkMediaPlayer.java:202)
at com.shuyu.gsyvideoplayer.GSYVideoManager.(GSYVideoManager.java:204)
at com.shuyu.gsyvideoplayer.GSYVideoManager.instance(GSYVideoManager.java:84)
at com.shuyu.gsyvideoplayer.GSYVideoPlayer.isCurrentMediaListener(GSYVideoPlayer.java:1064)
at com.shuyu.gsyvideoplayer.GSYVideoPlayer.setUp(GSYVideoPlayer.java:227)
at com.apps.android.news.news.ui.widget.MyVideoPlayer.setUp(MyVideoPlayer.java:179)
at com.apps.android.news.news.ui.activity.VideoDetailActivity.setVideo(VideoDetailActivity.java:144)
at com.apps.android.news.news.ui.activity.VideoDetailActivity.onCreate(VideoDetailActivity.java:117)
at android.app.Activity.performCreate(Activity.java:6041)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1109)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2285)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2394)
at android.app.ActivityThread.access$800(ActivityThread.java:154)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5276)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:911)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:706)

关于onAutoComplete()回调的问题

我现在想实现一个videoView播放我一个string数组里面的视频地址的视频
我就在onAutoComplete这个回调里面再
videoView.setUp(urls[index],true,null,"");
然后startPlayLogic

//播放完了
@OverRide
public void onAutoComplete(String s, Object... objects) {
Log.d("tag","index:"+index);
//Log.d("tag","string:"+s);这是缓存地址
if(index != urls.length -1){
index ++;
}else{
index = 0;
}
videoView.setUp(urls[index],true,null,"");
startVideo();
}
然后LOG发现我的index是有递增,这个s地址
image
算不算同一个视频?如果不算那为什么我不能在这个方法内继续播放下一个视频?
先谢谢大大!新年快乐

一个小问题

在recyclerview中的demo 播放完毕之后点击上锁之后会出现一些问题 作者可以看看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.