npm 包 react-native-pili-fix 使用教程

前言

在移动端开发中,视频播放是一项非常重要的产品功能之一,而例如直播等场景下,更需要视频的高效流畅播放。而在 React Native 开发中,控制视频播放的库也比较多,而其中 pili-engineering/Pili-SDK-ReactNative 是一款基于七牛云的开源 React Native 视频播放器。但是,由于该库在 iOS 端存在音画不同步的问题,因此笔者在学习该库使用的过程中发现了一个早期的修复库 ceair-reactnative/react-native-pili-fix

本文将详细介绍如何使用这个修复库,在后面的使用过程中也会讲述这个修复库的原理和好处。

安装与引用

下面我们来看看如何安装该库。

--- ------- --------------------- ------

同时,在 Podfile 中也需要做相应的更改:

--- ----------------------- --- ----

接着,在项目中引用此库:

------ ----------------- ---- ------------------------

使用示例

使用该库和原版 Pili-SDK-ReactNative 的使用方式类似,其中最常用的两个组件是 PLMediaPlayerViewPLCameraStreamingView。接下来以 PLMediaPlayerView 为例,讲解如何使用此库进行开发。

------ ----------------- ---- ------------------------
------ ------ - --------- - ---- --------
------ - ----------- ----- ---- - ---- ---------------

------ ------- ----- --- ------- --------- -
  -------- -
    ------ -
      ----- -------------------------
        ----- ---------------------------------------------
        ----- --------------------------
          ------------------
            --------------------------
            --------- ---- ------------------------------------------------------------------ --
          --
        -------
      -------
    --
  -
-

----- ------ - -------------------
  ---------- -
    ----- --
    ----------- ---------
    --------------- ---------
  --
  ------ -
    --------- ---
    ------------- ---
    ----------- -------
  --
  ----------- -
    ------- ----
    ------ ----
  --
  ------------ -
    ----- --
  --
---

这里仅仅是一个最简单的播放器示例,你可以继续通过 Pili-SDK-ReactNative 提供的各种属性和方法进行开发。

修复原理

ceair-reactnative/react-native-pili-fix 的仓库中,作者提到了该库的原理,即其替换了原版 Pili-SDK-ReactNativePlayerManager 类,这个类主要负责视频播放相关的一些底层操作。

--------------- ------------------

- ------------------ -
    -- ----- - ------ ------ -
        ------- - ---------- ------ --------------------
        ---------------- - -----
        ----------------------------- - ----
        ------------------------------- - --
        --------------------- - --------------------------
        -------- -------------------------
        -------- ---------------
    -
    ------ -----
-

------- ---- - ----------------

- --------------------- -------- -------- ------------------------------------- -
    -- -------------- -- -------------- ------------------------------------------------------ -
        -------------- -----------------------------
    -
-

- --------------------- -------- -------- -------------------------- ------- ------- -
    -- -------------- -- -------------- ------------------------------------------------------- -
        -------------- ------------------------------
    -
-

- --------------------- -------- -------- ---------------------------------------------------- -
    -- -------------- -- -------------- -------------------------------------------------- -
        -------------- -----------------------------------
    -
-

----

如你所见,在原版 Pili-SDK-ReactNative 中,这个类简单地添加了 delegatebufferingEnabled 等一些原生 API 的使用。而在修复版中,这个类多了一个 player:currentTime:reason: 方法。这个方法的实现如下:

- --------------------- -------- -------- -------------------------------- --------------------------------------------- -
    -- --------------- -- ------ -- -------------------------------------------------------------- -
        -- ---------- -- - -- -------------- - ----- - ---- -
            ------------- -- ----- --- --------- ---- ----- -----------
            -------------- --------------------------------------------
            ------- -------
            ------- ------
            -------
        -
        --------- - -----
    -
    ---- -
        --------- - --
    -
    -- -------------- -- -------------- ---------------------------------------------------------- -
        -------------- ------------- ---------------- ---------------
    -
-

这个方法的作用就是判断 iOS 版本号是否为 8,如果是则强制定时发送一次左耳声音数据。在运行时里,这个类就可以重新拦截和处理底层操作。

好处与指导意义

在漫长的开发过程中,我们难免会遇到各种奇奇怪怪的问题,而解决这些问题的过程,也常常可以带给我们一些启示。因此,在这里,我们总结一下使用这个修复库的好处和应该引以为戒的地方。

首先,这个库解决了原版 Pili-SDK-ReactNative 在 iOS 端存在的音画不同步问题,因此具有一定的参考和借鉴意义。

其次,这个库虽然是早期的修复方案,但通过阅读其源码,我们也可以学到很多关于 iOS 应用开发的技巧和套路,例如面向对象的编程思想、调试工具的使用、开源类库的使用和拓展、安装、引用和调试库的方式等等。

最后,我们也应该引以为戒,这个库的实现方式比较危险,特别是加入了判断 iOS 版本的操作,在更新版 iOS 等情况下可能存在失效的风险。因此,在开发过程中应引以为戒,同时也应该积极寻找更好的解决方案,并及时优化和迭代原代码。

结语

Pili-SDK-ReactNative 是一个成熟的开源视频播放管理库,但在使用时可能存在一些问题。而 ceair-reactnative/react-native-pili-fix 就是一个早期的解决方案。在使用过程中,我们要始终牢记学习和实践的经验,同时也考虑我们的代码运用等一系列因素。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/600559e181e8991b448d76eb


猜你喜欢

  • npm 包 mockserver-web 使用教程

    在前端开发中,经常会需要对接口进行模拟和测试,以便在没有后端接口的情况下进行开发和调试。mockserver-web 是一个方便可靠的 npm 包,能够通过模拟接口请求和响应来模拟后端接口,供前端调试...

    2 年前
  • npm 包 serverless-client-s3-custom 使用教程

    介绍 在 serverless 架构中,前端与后端可以完全分离,前端静态资源可以直接存储到 S3 上,通过前端框架(如 React、Vue 等)来调用后端接口,实现前后端分离的目的。

    2 年前
  • npm 包 calendar-util 使用教程

    calendar-util 是一个用于操作日历和日期的 npm 包。它提供了一些非常有用的方法,可以帮助开发者轻松处理常见日期问题。在本文中,我们将介绍如何使用 calendar-util 包,以及它...

    2 年前
  • npm 包 crypto-shuffle 使用教程

    随着数字货币的兴起,安全的加密算法变得越来越重要。而 crypto-shuffle 是一个基于 JavaScript 的库,可以对数组进行乱序加密。本文将介绍如何在前端中使用 crypto-shuff...

    2 年前
  • npm 包 @passmarked/browser 使用教程

    什么是 @passmarked/browser @passmarked/browser 是一个基于 Node.js 的 npm 包,可以帮助我们测试网站在不同浏览器下的兼容性。

    2 年前
  • npm 包 dream-cheeky-windows-driver 使用教程

    前言 如果你曾使用过鼠标或键盘外设 Dream Cheeky 的产品,你可能会发现 Windows 操作系统在默认情况下无法很好地解释这些设备的输入,例如 Thunder Missile Launch...

    2 年前
  • npm 包 `google-translate-api-extended` 使用教程

    简介 google-translate-api-extended 是基于 google-translate-api 修改的更加高级的谷歌翻译 API 封装库,它提供了更加全面的谷歌翻译 API 功能,...

    2 年前
  • npm 包 hexin-generator 使用教程

    简介 hexin-generator 是一个前端脚手架工具,它可以帮助我们快速生成项目的基本结构,并且自定义配置也非常方便。 在使用 hexin-generator 之前,需要先了解一些基本的 npm...

    2 年前
  • npm 包 hexin-native 使用教程

    hexin-native 是一个基于 React Native 框架的 npm 包,它可以让开发者更加轻松地在 React Native 应用中集成和开发海信智能设备相关的功能。

    2 年前
  • npm 包 generator-gl-ionic-webpack-typescript-seed 使用教程

    前言 如果你是一名前端开发人员,并且正在寻找一个快速开发 Ionic 应用程序的方式,那么你来对地方了!本文将向您介绍一款名为 generator-gl-ionic-webpack-typescrip...

    2 年前
  • 使用 nativescript-azure-storage 包进行 Azure 存储操作的教程

    引言 Azure 存储是 Microsoft 提供的一种云数据存储服务,它是开发大规模应用程序所需的高度可扩展性、高可用性、自动管理的云储存解决方案。 在前端开发中,经常需要使用云存储来存储和管理数据...

    2 年前
  • npm 包 parse-large-json 使用教程

    在前端开发中,处理大型 JSON 数据是比较常见的任务。然而,由于大型 JSON 数据的体积较大,直接使用 JSON.parse() 方法会导致内存溢出的问题,导致程序崩溃。

    2 年前
  • npm 包 @dpwanjala/router 使用教程

    简介 @dpwanjala/router 是一个轻量级的 JavaScript 路由插件,适用于前端开发。它提供了一种简单而强大的方式来管理应用程序的路径,并支持异步加载你的项目。

    2 年前
  • NPM 包 react-native-unified-push 使用教程

    前言 在移动应用程序开发过程中,推送通知已成为一个非常普遍的需求。为了方便开发人员快速实现推送通知功能,各种推送 SDK 和开源库相继出现。其中,React Native 是一种方便快捷的前端开发框架...

    2 年前
  • npm 包 cdsrc 的使用教程

    在前端开发过程中,我们经常需要使用到各种工具包和模块化组件,而这些工具包或组件往往来自于 npm 包管理器。npm 包管理器作为世界上最大的软件注册表,包含了大量前端工具包和组件。

    2 年前
  • npm 包 noerr 使用教程

    在前端开发中,我们经常需要处理异常。当代码中存在异常时,我们必须尽快处理它们,以避免程序崩溃、数据丢失等问题。npm 包 noerr (No Error)就是一个非常实用的工具,它可以帮助你快速捕获和...

    2 年前
  • npm 包 cd-clock 使用教程

    前言 在前端开发中,时钟是一个很常见的功能,特别是在需要实时监控某些数据的应用场景下。但是,自己写一个时钟控件不仅费时费力,而且还有很多细节需要考虑。这时,我们就可以考虑使用已经封装好的 npm 包 ...

    2 年前
  • npm 包 no-console-webpack-plugin 使用教程

    如果你是一名前端开发者,你一定知道 console.log() 很方便用于调试。但是,在生产环境中,很可能会出现一些安全性或者效率问题。为了解决这些问题,我们可以使用 npm 包 no-console...

    2 年前
  • 可重复使用模块:npm 包 @ull-edna-joseluis-kevin-35l2/ull-operation-resta

    npm 是一个开源的 JavaScript 包管理器,用于安装、上传、搜索、管理、共享你的代码。而 @ull-edna-joseluis-kevin-35l2/ull-operation-resta ...

    2 年前
  • npm 包 jubi-for-loop 使用教程

    前言 jubi-for-loop 是一个非常实用的 npm 包,它可以让前端开发者在使用 for 循环时,写出更加简洁、易读和高效的代码。在本文中,我们将详细介绍 jubi-for-loop 的使用方...

    2 年前

相关推荐

    暂无文章