Thanks to visit codestin.com
Credit goes to gitcode.com

videocache4cj:音视频边播边缓存库,支持自定义缓存策略与请求头

一个支持边播放边视频缓存库,输入视频的URL就可方便快捷的实现视频边下边播功能

分支5Tags4

videocache4cj

介绍

videoCache4cj是一个支持边播放边缓存的库,只需要将音视频的url传递给videoCache4cj处理之后再设置给播放器,videoCache4cj就可以一边下载音视频数据并保存在本地,一遍读取本地缓存返回给播放器,使用者无需进行其他操作。

特性

  • 🚀 1.自定义设置缓存文件夹位置
  • 🚀 2.设置最大缓存数据清理策略
  • 🚀 3.添加请求头
  • 🚀 4.使用自定义的缓存文件命名规则
  • 🚀 5.注册/取消注册缓存进度监听器
  • 🚀 6.设置自定义的缓存文件清理规则

源码目录

├── README.md                                 #整体介绍
├── doc                                       #文档目录
│   └── feature_api.md                        #API接口文档
├── videocache                                #源码目录 
├── entry                                     #示例目录
└── hvigor                                    #构建工具目录

接口说明

主要类和函数接口说明详见 API

使用说明

编译构建

描述具体的编译过程:


    1.先通过命令把代码下载下来,
      git clone -b 具体分支名  https://gitcode.com/Cangjie-TPC/videocache4cj.git
          
    2.选择videocache模块,点击Build菜单,然后点击 Make Module 'videocache' 等待编译完成,项目则编译成功
    

功能示例

1. 把videocache作为三方库依赖引入

用户如何在自己项目里引入videocache,具体步骤如下:
1. 在自己项目的根目录下,建一个thirdparty目录,然后通过git命令,把自己需要的ijk分支拉下来,比如
   git clone -b 分支名  https://gitcode.com/Cangjie-TPC/videocache4cj.git
2. 把 thirdparty文件下的videocache项目用deveco编译通过,方法如上面的编译构建
3. 在自己项目的根目录的build-profile.json5文件里的modules节点下添加
    {
      "name":"videocache",
      "srcPath": "./thirdparty/videocache4cj/videocache"
    }
   把videocache库的依赖变为modeule依赖形式.然后同步项目
4. 在自己项目的enrty里的oh-package.json5里的dependencies里加上     "videocache": "file:../thirdparty/videocache4cj/videocache",,然后同步项目
   "dependencies": {
      "videocache": "file:../thirdparty/videocache4cj/videocache",
      "libark_interop_loader.so": "file:./src/main/cangjie/loader"
  }
   项目即依赖成功

2. 使用videocache生成代理url地址

示例代码如下:


/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2024-2024. All rights reserved.
 */
package ohos_app_cangjie_entry

public class GlobalProxyServer {
    private let CONTEXT_STR: String = "getContext"
    private let SERVER_STR: String = "getServer"
    private static var instance: ?GlobalProxyServer = None
    private var _objects: HashMap<String, Object> = HashMap<String, Object>()

    private init() {
    }

    public static func getInstance(): GlobalProxyServer {
        if (GlobalProxyServer.instance.isNone()) {
            GlobalProxyServer.instance = GlobalProxyServer()
        }
        return GlobalProxyServer.instance.getOrThrow()
    }

    func getContext(): ?AbilityContext {
        return this._objects.get(this.CONTEXT_STR).getOrThrow() as AbilityContext
    }

    func setContext(context: AbilityContext) {
        this._objects.put(this.CONTEXT_STR, context)
    }

    func getServer(): HttpProxyCacheServer {
        return (this._objects.get(this.SERVER_STR).getOrThrow() as HttpProxyCacheServer).getOrThrow()
    }

    func setServer(server: HttpProxyCacheServer) {
        try {
            let currentServer: HttpProxyCacheServer = this.getServer()
            currentServer.shutdown()
        } catch (e: Exception) {
        }
        this._objects.put(this.SERVER_STR, server)
    }
}



/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2024-2024. All rights reserved.
 */

package ohos_app_cangjie_entry

import ohos.state_macro_manage.*
import std.time.Duration

@Entry
@Component
class MyView {
    @State
    var message: String = "Hello Cangjie"

    var proxyUrl:String = ""

    func build() {
        Row {
            Column {
                Button(message).onClick {
                            var originUrl = "https://vodpub1.v.news.cn/original/20230915/e6520e0158e44a7383bd137bd42f4451.mp4"
                            var server: HttpProxyCacheServer = HttpProxyCacheServerBuilder(globalAbilityContext.getOrThrow())
                            .cacheDirectory("自定义缓存目录")  //可选
                            .setFileNameGenerator("自定义文件命名规则类") //可选
                            .setHeaderInjector("自定义请求头类")  //可选
                            //.maxCacheSize(1024*1024*1024) //最大文件缓存 配合的是TotalCountLruDiskUsage //可选
                            //.maxCacheFilesCount(10) //最大缓存数量 配合的是TotalSizeLruDiskUsage //可选
                            .setDiskUsage("自定义缓存清理策略") //不设置默认走LrudiskUsage //可选
                            .build()
                            GlobalProxyServer.getInstance().setServer(server)
                            let tempUrl =  GlobalProxyServer.getInstance().getServer().getProxyUrl(originUrl,true)
                            if(tempUrl.get().size>0){
                                proxyUrl = tempUrl.get()
                            }else{
                                proxyUrl = originUrl
                            }
                            //this.avPlayer.url = proxyUrl; 把代理url地址赋值给播放器
                            Hilog.error(0x0000,"proxyUrl","${proxyUrl}")
                }.fontSize(40).height(80)
            }.width(100.percent)
        }.height(100.percent)
    }
}

执行结果如下:

  http://127.0.0.1:27180/https://vodpub1.v.news.cn/original/20230915/e6520e0158e44a7383bd137bd42f4451.mp4

约束与限制

IDE : DevEco Studio 5.0.1 Release (5.0.5.315)

Plugins (SDK) : DevEco Studio-Cangjie Plugin Beta1(5.0.5.306.117)

开源协议

本项目基于 Apache License ,请自由的享受和参与开源。

参与贡献

欢迎给我们提交PR,欢迎给我们提交Issue,欢迎参与任何形式的贡献。

项目介绍

一个支持边播放边视频缓存库,输入视频的URL就可方便快捷的实现视频边下边播功能

定制我的领域