Code Monkey home page Code Monkey logo

kjplayerdemo's Introduction

KJPlayer

🎸 - 好消息,音视频播放器翻天覆地大改版她来了!!!

English | 简体中文

功能介绍

动态切换内核,支持边下边播的播放器方案

  • 支持音/视频播放,midi文件播放
  • 支持在线播放/本地播放
  • 支持后台播放,音频提取播放
  • 支持视频边下边播,分片下载播放存储
  • 支持断点续载续播,下次直接优先从缓冲读取播放
  • 支持缓存管理,清除时间段缓存
  • 支持试看,自动跳过片头片尾
  • 支持记录上次播放时间
  • 支持自动播放,自动连续播放
  • 支持随机/重复/顺序播放
  • 支持重力感应,全屏/半屏切换
  • 支持基本手势操作,进度音量等
  • 支持锁定屏幕
  • 长按快进快退等操作
  • 支持倍速播放
  • 支持切换不同分辨率视频
  • 支持直播流媒体播放
  • 持续更新ing...

视频支持格式:mp4、m3u8、wav、avi
音频支持格式:midi、mp3、


效果图

免费试看功能

  • 该功能类似于Vip会员观看性质,充值之后继续播放观看模式
// MARK: - KJPlayerFreeDelegate
extension DetailsViewController: KJPlayerFreeDelegate {

    /// 获取免费试看时间
    /// - Parameter player: 播放器内核
    /// - Returns: 试看时间,返回零不限制
    func kj_freeLookTime(with player: KJBasePlayer) -> TimeInterval {
        return 50
    }
    
    /// 试看结束响应
    /// - Parameters:
    ///   - player: 播放器内核
    ///   - currentTime: 当前播放时间
    func kj_freeLookTime(with player: KJBasePlayer, currentTime: TimeInterval) {
        
    }
}
  • 充值之后恢复观看权限
self.player.kj_closeFreeLookTimeLimit()

CocoaPods安装尝试观看模块

pod 'KJPlayer/FreeTime' # vip尝试观看功能

跳过片头片尾功能

  • 该功能很明确就是类似于观看视频跳过片头和片尾功能
// MARK: - KJPlayerSkipDelegate
extension DetailsViewController: KJPlayerSkipDelegate {

    /// 跳过片头
    /// - Parameter player: 内核
    /// - Returns: 需要跳过的时间
    func kj_skipOpeningTime(with player: KJBasePlayer) -> TimeInterval {
        return 18
    }
    
    /// 跳过片头响应
    /// - Parameters:
    ///   - player: 内核
    ///   - openingTime: 跳过播放时间
    func kj_skipOpeningTime(with player: KJBasePlayer, openingTime: TimeInterval) {
        self.backview.hintTextLayer.kj_displayHintText("跳过片头,自动播放",
                                                       time: 5,
                                                       position: KJPlayerHintPositionBottom)
    }
}

CocoaPods安装跳过片头片尾模块

pod 'KJPlayer/SkipTime' # vip跳过片头片尾功能

记忆播放功能

  • 该功能会自动记忆上次播放时间,下次直接无缝开始继续播放
// MARK: - KJPlayerRecordDelegate
extension DetailsViewController: KJPlayerRecordDelegate {

    /// 获取是否需要记录响应
    /// - Parameter player: 播放器内核
    /// - Returns: 是否需要记忆播放
    func kj_recordTime(with player: KJBasePlayer) -> Bool {
        return true
    }
    
    /// 获取到上次播放时间响应
    /// - Parameters:
    ///   - player: 播放器内核
    ///   - lastTime: 上次播放时间
    func kj_recordTime(with player: KJBasePlayer, lastTime: TimeInterval) {
        
    }
}
  • 主动选择储存记忆
self.player.kj_saveRecordLastTime()

CocoaPods安装自动记忆播放模块

pod 'KJPlayer/RecordTime' # vip自动记忆播放功能

备注提示:该功能大于跳过片头功能,简单讲就是该功能实现之后下次会直接从上次播放位置开始继续观看


其余功能模块

1.播放器模块

  • midi内核:pod 'KJPlayer/MIDI'
  • ijk内核:pod 'KJPlayer/IJKPlayer'
  • av内核:pod 'KJPlayer/AVPlayer/AVCore'
  • 自定义UI:pod 'KJPlayer/CustomView'
  • 数据库:pod 'KJPlayer/Database'

2.功能区域模块

  • AVPlayer内核扩展功能

    • 边下边播边存分支:pod 'KJPlayer/AVPlayer/AVDownloader'
  • 记忆播放:pod 'KJPlayer/RecordTime'

  • 尝鲜播放:pod 'KJPlayer/FreeTime'

  • 跳过片头片尾:pod 'KJPlayer/SkipTime'

  • 缓存板块:pod 'KJPlayer/Cache'

  • 视频截屏板块:pod 'KJPlayer/Screenshots'

  • 切换内核:pod 'KJPlayer/DynamicSource

    • 目前支持3种内核:AVPlayer内核、MIDI内核、IJKPlayer内核

大致流程就差不多这样子,Demo也写的很详细,可以自己去看看🎷

KJPlayerDemo

总结:先把基本的壳子完善,后面再慢慢来补充其他的内核,如若觉得有帮助请帮忙点个星,有什么问题和需求也可以Issues

关于作者

救救孩子吧,谢谢各位老板。

🥺


kjplayerdemo's People

Contributors

safina008 avatar yalin0 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

kjplayerdemo's Issues

KJAVPlayer有个崩溃问题

连续调用多次setVideoURL导致崩溃,应该是因为里面用了GlobalDispatchQueue并行队列,导致两次播放准备方法同时执行,在[_playerItem addOutput:_playerOutput];时崩溃,这里是不是可以改成串行队列?

iOS16横屏问题

请问这个适配iOS16横屏了吗?有大佬用这个做iOS16适配了吗?

BUG

运行demo出现了两个问题,一个是进度条会跳动 例如从1:0 调到4:01 一直来回跳
第二个 点击暂停无效
还有一个是收藏下载这些 应该给个设置可以隐藏吧

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.