5.0.3 • Published 4 years ago

panoramic-player v5.0.3

Weekly downloads
-
License
ISC
Repository
-
Last release
4 years ago

panoramic-player

一个Vue全景视频播放插件(支持flv/hls)

A Vue panoramic video playback plug-in (support flv/hls)

  • 支持PC端H5移动端播放flv/m3u8视频地址;
  • 全景视频支持移动端单手滑动双指缩放
  • 全景视频陀螺仪功能iOS13 +需要用户授权,并且要在https环境下测试 ;

安装使用(install panoramic-player)

npm i panoramic-player -S
or 
yarn add panoramic-player -S

1.注册组件

import PanoramicPlayer from 'panoramic-player'

Vue.use(PanoramicPlayer)

2.使用组件

配置传参

  • flv_src:.flv格式摄像头地址
  • hls_src:.m3u8格式摄像头地址
  • open_panoramic:开启全景视频渲染模式(默认false)
  • onlyId: 组件唯一ID【v-for时区分组件】
  • h265_coding: 开启flv h265解码
  • isLive: 视频是否为直播
  • duration: 视频时长 - 单位s【isLive=false 非直播必传】
  • progressTime:初始化控制条显示时长【处理拖拽更新录像】
  • simpleMode:简单模式【隐藏控制条部分功能】
  • hlsLoadTimeout:设置ios直播延时播放等待时间(s)【内部特殊需求配置】
  • hideDuration:隐藏录像播放时间

回调函数

  • @getCurrentDuration:获取当前录像播放时间(单位:s)
  • @listenFullScreen:监听视频全屏状态回调
  • @listenPlayFinish:监听视频录像播放完毕回调
  • @listenRefreshVideo:监听视频触发重连回调

简单用法

<panoramic-player 
    flv_src="xxx.flv" 
    hls_src="xxx.m3u8"
    :open_panoramic="true"
/>

v-for遍历添加onlyId

可以通过document.getElementById(onlyId)获取当前对应的video标签

<div v-for="(item,index) in list" :key="index">
    <panoramic-player 
        :onlyId="`PanoramicPlayer${index}`"
        flv_src="xxx.flv" 
        hls_src="xxx.m3u8"
    />
</div>

本地测试 (local test)

git clone https://gitee.com/taco-gigigi/panoramic-player.git

cd ./panoramic-player

yarn install
or
npm install 

npm run serve

flv.js延迟优化

1.FLV传输过程

  1. 主播端在采集到一段时间的音视频原数据后,因为音视频原数据庞大需要先压缩数据:
    • 通过H264视频编码压缩数据数据
    • 通过PCM音频编码压缩音频AAC数据
  2. 压缩完后再通过FLV容器格式封装压缩后的数据,封装成一个FLV TAG
  3. 再把FLV TAG通过RTMP协议推流到音视频服务器,音视频服务器再从RTMP协议里解析出FLV TAG。
  4. 音视频服务器再通过HTTP协议通过和浏览器建立的长链接流式把FLV TAG传给浏览器。
  5. flv.js 获取FLV TAG后解析出压缩后的音视频数据喂给Video播放。

2.如何优化

  • 主播端采集时收集了一段时间的音视频原数据,它专业的叫法是GOP。缩短这个收集时间(也就是减少GOP长度)可以优化延迟,但这样做的坏处是导致视频压缩率不高,传输效率低。
  • 关闭音视频服务器的I桢缓存可以优化延迟,坏处是用户看到直播首屏的时间变大。
  • 减少音视频服务器的buffer可以优化延迟,坏处是音视频服务器处理效率降低。
  • 减少浏览器端flv.js的buffer可以优化延迟,坏处是浏览器端处理效率降低。
  • 浏览器端开启flv.js的Worker,多线程运行flv.js提升解析速度可以优化延迟,这样做的flv.js配置代码是:
config = {
          enableWorker: true,
          enableStashBuffer: false,
          stashInitialSize: 128,// 减少首桢显示等待时长
}

HTTP 1.x 问题

A - 对同源连接的并发个数有限制

HTTP 1.x 对同源的http-flv连接的并发个数有限制,典型值是6,如chrome,由于项目的需求,需要在浏览器端同时打开超过6路的视频流。

解决方案:

  • nginx 配置http2【必须在https环境基础上配置】
  • 使用ws-flv
B - http1.x线头阻塞

当同时打开多个视频时,后面请求的地址必须等待前面的请求响应完成后才能继续交互【情况:前面请求的视频拉流异常或设备已关闭】。

解决方案:

nginx 配置http2

http2机制是并行处理请求,http1.x是串行化处理请求

所以http2不会造成线头阻塞

C - nginx配置http2
server{
    listen 443 ssl http2; # 配置http 2.0
    server_name www.live-testing.com; # 域名

    ssl_certificate      H:/nginx-1.18.0/pem/server.crt;
    ssl_certificate_key  H:/nginx-1.18.0/pem/server.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers on;
    location / {
        proxy_pass 流媒体服务器地址;
    }

}

运行结果:

更新日志 (update log)

v4.x

2021-9-8 (v4.6.x)
-> 修复iphone 7 plus微信浏览器无法播放直播视频
-> 完善录播视频功能

2021-8-2 (v4.5.x)
-> 新增播放录播视频功能

2021-7-13 (v4.4.x)
-> flv优化重连机制,当触发重连使用canvas显示视频最后一帧画面,重连成功后显示视频(避免黑屏/闪屏)

2021-6-29 (v4.3.x)
-> flv-video组件网络波动指定次数自动重连
-> flv-video捕获报错超过限制自动重连
-> flv-video检测流量为0KPbs,则自动重连5次,第六次关闭视频

2021-6-28 (v4.2.4)
-> flv-video组件添加处理网络波动,自动重连处理

2021-6-8 (v4.1.0)
-> flv支持h265视频编码格式播放

2021-6-2
-> 优化直播视频延迟(主动赶帧)
-> 更新处理多于6个视频并发个数的解决方案
-> 优化视频底部控制条功能

v3.x

v3.1.2
-> 添加兼容 iOS13+ 全景视频陀螺仪代码(用户授权)
-> 修复本地测试Demo运行异常

v3.1.1
-> 全景视频组件销毁前关闭视频推流
-> 修复全景视频PC端拖拽超出容器松开鼠标Bug

v3.1.0
-> 修复v-for遍历问题,添加onlyId唯一标识
-> 修复全景contro bar、设置固定宽高时渲染的一些样式错误问题

问题整理

A - iphone 7plus 微信浏览器 System: iOS14.6, wechat8.0.2 m3u8视频无法播放

* 问题:使用自定义video-controler组件不能正常播放
* 处理:使用video自带controls控制条播放

B - flv直播抛出异常视频自动暂停【重连或刷新后恢复】

flv.js 11 bytes unconsumed data remain when flush buffer, dropped
译:[IOController] > 11 字节未使用的数据在刷新缓冲区时剩余,丢弃

处理方案:
1. 在executeSkipping计时器方法中,监听flv.js KBps回调。
   各自缓存当前时间戳进行对比,若差距>10s & 播放状态为暂停则重连
5.0.3

4 years ago

5.0.2

4 years ago

5.0.1

4 years ago

4.8.8

4 years ago

5.0.0

4 years ago

4.8.7

4 years ago

4.8.6

4 years ago

4.8.1

4 years ago

4.8.0

4 years ago

4.8.3

4 years ago

4.8.2

4 years ago

4.7.9

4 years ago

4.7.8

4 years ago

4.7.7

4 years ago

4.7.6

4 years ago

4.7.5

4 years ago

4.7.4

4 years ago

4.7.3

4 years ago

4.7.2

4 years ago

4.7.1

4 years ago

4.7.0

4 years ago

4.6.11

4 years ago

4.6.12

4 years ago

4.6.10

4 years ago

4.6.15

4 years ago

4.6.16

4 years ago

4.6.14

4 years ago

4.6.17

4 years ago

4.6.7

4 years ago

4.6.6

4 years ago

4.6.9

4 years ago

4.6.8

4 years ago

4.6.5

4 years ago

4.6.3

4 years ago

4.6.1

4 years ago

4.6.2

4 years ago

4.6.0

4 years ago

4.5.12

4 years ago

4.5.11

4 years ago

4.5.8

4 years ago

4.5.9

4 years ago

4.5.10

4 years ago

4.5.7

4 years ago

4.5.6

4 years ago

4.5.4

4 years ago

4.5.5

4 years ago

4.5.3

4 years ago

4.5.2

4 years ago

4.5.0

4 years ago

4.5.1

4 years ago

4.4.10

4 years ago

4.4.9

4 years ago

4.4.8

4 years ago

4.4.7

4 years ago

4.4.6

4 years ago

4.4.3

4 years ago

4.4.2

4 years ago

4.4.5

4 years ago

4.4.4

4 years ago

4.4.1

4 years ago

4.4.0

4 years ago

4.3.9

4 years ago

4.3.12

4 years ago

4.3.11

4 years ago

4.3.10

4 years ago

4.3.8

4 years ago

4.3.7

4 years ago

4.3.6

4 years ago

4.3.5

4 years ago

4.3.2

4 years ago

4.3.1

4 years ago

4.2.11

4 years ago

4.3.3

4 years ago

4.3.0

4 years ago

4.2.9

4 years ago

4.2.8

4 years ago

4.2.10

4 years ago

4.2.2

4 years ago

4.2.5

4 years ago

4.2.4

4 years ago

4.2.7

4 years ago

4.2.6

4 years ago

4.2.1

4 years ago

4.2.0

4 years ago

4.1.8

4 years ago

4.1.7

4 years ago

4.1.9

4 years ago

4.1.6

4 years ago

4.1.4

4 years ago

4.1.3

4 years ago

4.0.4

4 years ago

4.1.5

4 years ago

4.1.0

4 years ago

4.0.1

4 years ago

4.0.0

4 years ago

4.1.2

4 years ago

4.0.3

4 years ago

4.1.1

4 years ago

4.0.2

4 years ago

3.1.3

4 years ago

3.1.2

4 years ago

3.1.1

4 years ago

3.1.0

4 years ago

3.0.9

4 years ago

3.0.8

4 years ago

3.0.7

4 years ago

3.0.6

4 years ago

3.0.5

4 years ago

3.0.4

4 years ago

3.0.3

4 years ago

3.0.1

4 years ago

3.0.0

4 years ago

2.0.0

4 years ago

1.1.3

4 years ago

1.1.2

4 years ago

1.1.1

4 years ago

1.1.0

4 years ago

1.0.9

4 years ago

1.0.8

4 years ago

1.0.7

4 years ago

1.0.6

4 years ago

1.0.5

4 years ago

1.0.4

4 years ago

1.0.3

4 years ago

1.0.2

4 years ago

1.0.17

4 years ago

1.0.16

4 years ago

1.0.15

4 years ago

1.0.14

4 years ago

1.0.13

4 years ago

1.0.12

4 years ago

1.0.11

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago