flv.js播放视频卡顿问题解决方法总结

flv.js解决延迟、卡死、断流重连问题 阅读详情

背景

近日项目中需要做些录播和直播类的功能,需要用到播放flv视频的组件,找到了B站的开源组件flv.js

本文章不涉及到flv.js具体使用方法,flv.js具体使用参见B站github地址

只将将使用中遇到的问题总结一下,共参考

  • flv录制后,快进问题
  • flv回放时,跨域问题

flv快进问题

flv.js在快进时,视频会卡住不动,原因有两个:

  • 服务端没配好OPTIONS请求,在nginx的配置文件中添加:
server {
......
location / {
        if ($request_method = 'OPTIONS') {
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            #
            # Custom headers and headers various browsers *should* be OK with but aren't
            #
            add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
            #
            # Tell client that this pre-flight info is valid for 20 days
            #
            add_header 'Access-Control-Max-Age' 1728000;
            add_header 'Content-Type' 'text/plain; charset=utf-8';
            add_header 'Content-Length' 0;
            return 204;
        }
        if ($request_method = 'POST') {
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
            add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
        }
        if ($request_method = 'GET') {
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
            add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
        }  
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
......
}
  • flv没有元数据信息,需要使用工具yamdi注入信息

关于yamdi参见yamdi官方文档

使用yamdi注入元数据信息命令如下:

yamdi -i src.flv -o src_meta.flv

这样操作后,flv在快进时就不卡顿了

flv在直播过程中声音弱化问题

实际使用中发现,fixAudioTimestampGap会对声音做处理

官网是这么描述的: Fill silent audio frames to avoid a/v unsync when detect large audio timestamp gap. 主要处理声音与视频不同步的问题。默认值为:true。在网路允许的情况下,可以改为false。

flvPlayer = flvjs.createPlayer({
        type: type,
        url: url,
        hasAudio: true,
        hasVideo: true,
        isLive: false,
        withCredentials: false,
        cors: true,        
      }, {
        enableWorker: true,
        lazyLoadMaxDuration: 3 * 60,
        seekType: 'range',      
        fixAudioTimestampGap: false,  //主要是这个配置,直播时音频的码率会被降低,直播游戏时背景音会有回响,但是说话声音没问题
      });
flv.js--播放直播流时出现的累积延迟、断流重连以及画面卡顿解决方法 本文参考了https://blog.csdn.net/HJFQC/article/details/113188241,有细微的改动 解决延迟见 https://blog.csdn.net/daqinzl/article/details/122370388 断流重连 通过监听flvjs.Events.ERROR来判断连接是否已经断开,然后进行断流重连: player的定义 <div class="mainContainer"> <video id="video... 阅读详情

相关推荐

flv.js直播点播,播放flv视频时快进、重连、卡死、延迟等问题

flv视频流延迟 在普通的网络环境下,flv.js播放http-flv视频流延迟大概在3~5秒左右,对于实时性要求比较高的场景,显然是不适用的,那么怎么才能降低延迟呢? 通过对buffered(缓冲区末尾)和currentTime(当前播放位置)的比较,发现差值大概在1.8秒左右,这时候就需要我们定时检测currentTime和buffered的差值,然后手动跳帧,使currentTime和buffered同步(PS:这两个值在Player对象中可以获取到,可以查看我的上一篇帖子:vue使用flv.js(

java之路 1万+

Flv.js HTML5播放器内核-其他

Flv.js是HTML5 Flash视频FLV播放器,纯原生JavaScript开发,没有用到Flash。由bilibili网站开源。该项目依托于Media Source Extensions,受到hls.js的启发。 Flv.js是一个实现了在HTML5视频播放FLV格式视频的JavaScript库。它的工作原理是将FLV文件流转码复用成ISO BMFF(MP4 碎片)片段,然后通过Media Source Extensions将MP4片段喂进浏览器。 flv.js是使用ECMAScript 6编写的,然后通过Babel Compiler编译成ECMAScript 5,使用Browserify打包。 功能: FLV 容器,具有H.264 + AAC编解码器播放功能 多部分分段视频播放 HTTP FLV低延迟实时流播放 FLV通过WebSocket实时流播放 兼容Chrome, FireFox, Safari 10, IE11和Edge 十分低开销,并且通过你的浏览器进行硬件加速

vue+flv.js+SpringBoot+websocket实现视频监控与回放

vue+flv.js+SpringBoot+websocket实现视频监控与回放 需求:vue+springboot的项目,需要在页面展示出海康的硬盘录像机连接的摄像头的实时监控画面以及回放功能. 之前项目里是纯前端实现视频监控和回放功能.但是有局限性.就是ip地址必须固定.新的需求里设备ip不固定.所以必须换一种思路. 通过设备的主动注册,让设备去主动连接服务器后端通过socket推流给前端实现实时监控和回放功能; 思路: 1:初始化设备.后端项目启动时就调用初始化方法. 2:开启socket连接.

m0_67402970的博客 773

Windows平台安卓逆向分析:Frida环境搭建与实战避坑指南

动态插桩技术是软件安全分析和漏洞挖掘的核心手段之一,它允许在程序运行时注入代码,实时监控和修改其行为。这项技术的原理是通过在目标进程的内存空间中插入探测代码,实现对函数调用、数据流和程序逻辑的动态追踪与干预。在移动安全领域,动态插桩对于分析加密算法、协议通信和绕过安全机制具有不可替代的价值。Frida作为当前主流的动态插桩框架,以其跨平台、脚本化(支持JavaScript/Python)和易用性著称,广泛应用于安卓应用逆向分析、漏洞挖掘和安全评估等场景。本文聚焦于在Windows系统上搭建完整的Frida安

weixin_34187862的博客 521

A-V同步

AV同步的一些问题:先转载一份Arpi的邮件:Ive "developed" a new a-v sync engine in g2 code, which produces A-V: 0.0000for most mpeg1/vob streams i have.The video part is relative easy, but a bit tricky: when a PS pa

linux嵌入式驱动软件开发 1488

flvjs-播放视频、实时视频使用

flv.js 是一个基于 HTML5 Video 标签和 Media Source Extensions(MSE)实现的纯 JavaScript FLV 视频播放库。它允许用户在浏览器中直接播放 FLV 格式的视频,而不需要安装额外的插件。该库的目标是提供一个轻量、易用且功能强大的解决方案来处理 FLV 视频flv.js 的核心原理是利用 MSE API 将 FLV 流分段加载并传递给 Video 标签。

lzping_719的专栏 1212

教育平台视频卡顿终结者:基于flv.js的低延迟流媒体解决方案

你是否遇到过在线课堂因视频卡顿导致重要知识点遗漏?是否经历过直播答疑时因延迟过高而错失互动机会?教育平台的视频体验直接影响学习效果,而传统Flash方案已被现代浏览器淘汰,HTML5原生播放器又难以兼顾低延迟与兼容性。本文将详解如何利用flv.js构建稳定流畅的教育视频系统,让80%的卡顿问题通过前端优化得到解决。 读完本文你将掌握: - 教育场景下视频卡顿的三大根源及解决方案 - flv.js...

gitblog_00507的博客 1179

videojs 卡顿_多快好省的解决网页上视频播放兼容性问题

今天我们来介绍一个能够快速、便捷、有品质保障的技术手段来解决网页上视频播放兼容性问题。现在如果一个网站需要在网页上插入视频,第一反应就是用到H5的video标签,H5的出现解决一部分浏览器网页的播放问题,我们都知道IE一直是一个两耳不闻窗外事的存在,直到IE11版本,才开始勉强支持H5视频播放,那么问题来了,现在还有很多的用户在使用这IE11以下版本的浏览器,那就只能使用flash插件来支持播放...

weixin_39959482的博客 3850

macOS视频播放器IINA怎么用?从深夜踩坑到彻底入坑的亲测记录

深夜十一点,刚下好的电影双击打开,系统自带的 QuickTime 却甩来一句"无法识别此文件格式"。那种"下都下了却看不了"的憋屈,经历过的人都懂。也就是那个晚上,我装上了 IINA——专为 macOS 打造的现代视频播放器,免费、开源,几乎所有视频格式直接吞。折腾一小时,从此三年没再为"打不开"发过愁。 ## 🎬 第一次上手:把"打不开"变成"都能播" 安装比想象中还简单:官网下载 .dm

gitblog_00440的博客 220

使用 Vue 和 flv.js 实现流媒体视频播放:完整教程

本文详细介绍了如何在 Vue.js 项目中集成 flv.js,以实现宇视摄像头的实时视频播放。成功解决了多窗体视频播放问题,并优化了流媒体的加载速度和播放稳定性。文章还涵盖了在实际开发中遇到的挑战,例如处理摄像头的流媒体格式兼容性、视频加载延迟等问题,并提供了对应的解决方案。本文适合有一定 Vue.js 开发经验的读者,特别是那些在项目中需要实现流媒体视频播放功能的开发者。

Davi的博客 2万+

使用flv.js + websokect播放rtsp格式视频

-----------------------------------------------------------------分割线,我又来了,还是视频问题,这次优化了,提出了新的方案----------------------------------------------------------------------------------------------------------------------因为我是写成的一个组件,所以我的rtsp地址是传进来的。

yinshipin007的博客 5846

深入理解flv.js内部机制:从FLV解封装到MP4转封装全过程

你是否曾面临这样的困境:在Web应用中需要流畅播放FLV格式的视频流,却受限于浏览器对FLV格式的原生支持不足?传统解决方案往往依赖Flash插件,然而随着Flash技术的逐步淘汰,这一方案已不再可行。flv.js的出现,为HTML5环境下的FLV视频播放提供了革命性的解决方案。本文将深入剖析flv.js的内部工作机制,从FLV文件的解封装到MP4格式的转封装,全面解析这一过程中的关键技术和实现细...

gitblog_01192的博客 747

flvjs api 中文

flvjs.createPlayer() function createPlayer(mediaDataSource: MediaDataSource, config?: Config): Player; MediaDataSource Field Type Description type string Indicates media type,'flv'or'mp4' isLive? boolean Indic...

weiguoxin的专栏 1万+

flvjs@1.6.2播放视频解决卡顿问题(vue版本)

使用flvjs播放视频流,解决视频延迟问题

bamboozjy的博客 2422

ffmpeg time_base详解

ffmpeg time_base ffmpeg存在多个时间基准(time_base),对应不同的阶段(结构体),每个time_base具体的值不一样,ffmpeg提供函数在各个time_base中进行切换。搞清楚各个time_base的来源,对于阅读ffmpeg的代码很重要。 一、time_base 1、AVStream(libavformat/avformat.h) typede

chinabinlang的专栏 9380

Android音频解码中的时钟同步问题:原理、挑战与解决方案

音频同步在多媒体播放系统中至关重要,直接影响用户体验。研究表明,15ms以上的同步偏差会被53%的用户感知,而300ms以上的偏差则会导致90%的用户停止观看。音频同步的核心问题包括时间戳解析错误、时钟漂移、缓冲区动态调整等。在Android平台上,时钟精度和冷启动延迟是主要挑战。通过使用精确的硬件时钟、预缓冲策略和性能监控工具,可以有效优化音频同步。前沿解决方案如基于机器学习的动态调整和自适应抗抖动算法,进一步提升了同步精度和稳定性。

健健的博客 1629

ffmpeg 音频视频 使用过程中碰到的问题记录

1 音频packet解码为frame之后,音频数据的大小:         pframe-&gt;data[0],为数据地址,数据的大小应该使用函数av_samples_get_buffer_size( NULL, av_frame_get_channels( pFrame ), pFrame-&gt;nb_samples, ( AVSampleFormat )pFrame-&gt;format...

3247

流畅倍速播放的秘密:flv.js中的时间拉伸与音频优化技术

你是否遇到过这样的情况:观看视频时想加快播放速度节省时间,结果画面变得卡顿,声音扭曲刺耳?作为Web开发者,如何在HTML5环境下实现流畅的倍速播放体验?本文将深入解析flv.js如何通过时间拉伸(Time Stretching)和音频处理技术,让视频在2倍速甚至更高速度下依然保持清晰流畅。 读完本文你将了解: - 倍速播放时音频为何会失真 - flv.js如何通过时间拉伸保持音频音调 - 视频...

gitblog_00297的博客 603
上一篇: 使用ffmpeg或者java录制音频总结
下一篇: 总结经常使用的jvm调优参数
myan18
博客等级 码龄25年 15粉丝 21原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值