首页 > 其他分享 >MSE+Range案例

MSE+Range案例

时间:2025-01-07 10:29:48浏览次数:3  
标签:mediaSource mimeCodec 案例 Range video currentIndex var MSE sourceBuffer

MSE的demo实现思路:首先准备fmp4格式的视频地址或者切片,接着将MSE挂载到video上,创建createObjectURL转二进制数据,fetch请求在线地址,分段请求,监听这个数据流的获取状态,当这个ReadyState为open的时候, sourceBuffer.appendBuffer(buf)处理接收到的数据,否则mediaSource.endOfStream()结束接收数据流。

代码

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8" />
</head>

<body>
  <video controls></video>
  <script>
    var video=document.querySelector('video');

    // 视频 URL 队列(按顺序播放)
    var assetURLs=[
      ....
    ];

    // 当前播放的 URL 索引
    var currentIndex=0;

    // MIME 类型
    var mimeCodec='video/mp4; codecs="avc1.42E01E, mp4a.40.2"';

    if('MediaSource' in window&&MediaSource.isTypeSupported(mimeCodec)) {
      var mediaSource=new MediaSource();
      video.src=URL.createObjectURL(mediaSource);
      mediaSource.addEventListener('sourceopen',sourceOpen);
    } else {
      console.error('Unsupported MIME type or codec: ',mimeCodec);
    }

    function sourceOpen (_) {
      var mediaSource=this;
      var sourceBuffer=mediaSource.addSourceBuffer(mimeCodec);

      function loadNextVideo () {
        if(currentIndex>=assetURLs.length) {
          console.log('All videos played.');
          return;
        }

        var assetURL=assetURLs[currentIndex];
        fetchAB(assetURL,function(buf) {
          sourceBuffer.addEventListener('updateend',function updateEndHandler (_) {
            sourceBuffer.removeEventListener('updateend',updateEndHandler);
            currentIndex++;

            if(currentIndex<assetURLs.length) {
              mediaSource.removeSourceBuffer(sourceBuffer); // 清空 SourceBuffer
              mediaSource.endOfStream();
              loadNextVideo(); // 加载下一个视频
            } else {
              mediaSource.endOfStream();
              console.log('All videos loaded.');
            }

            video.play();
          });
          sourceBuffer.appendBuffer(buf);
        });
      }

      loadNextVideo();
    }

    function fetchAB (url,cb) {
      console.log(url);
      var xhr=new XMLHttpRequest();
      xhr.open('get',url);
      xhr.responseType='arraybuffer';
      xhr.onload=function() {
        cb(xhr.response);
      };
      xhr.send();
    }
  </script>
</body>

</html>

标签:mediaSource,mimeCodec,案例,Range,video,currentIndex,var,MSE,sourceBuffer
From: https://blog.csdn.net/m0_72030584/article/details/144908452

相关文章

  • 【金融行业】2024中国网络安全产业势能榜优能企业 · 金融行业典型案例展示
    金融行业一直是信息安全的重点领域,随着金融科技的快速发展和数字货币的崛起,金融机构面临着前所未有的挑战。数据泄露、网络攻击等安全事件的频发,促使金融企业加强安全保障。然而,信息安全的提高不仅仅是防止外部威胁的关键,更重要的是确保业务在突发事件或安全事件发生时的连续性和......
  • 「全网最细 + 实战源码案例」设计模式——外观模式
    概念外观模式是一种结构型模式,为复杂的子系统提供一个统一的接口,使得子系统的功能对外界更加简单、易用。与真实世界的类比当你通过打电话给商店下达订单时,接线员就是该商店所有服务和部门的外观。接线员为你提供了一个包含购物系统、支付网关、送货等服务的简单语言接口......
  • 【PostgreSQL数据库-Tried to send an out-of-range integer as a 2-byte value: 5356
    业务侧反馈,因为某业务积攒的单量太大,导致在数据批量入库的时候,产生如下报错,主要报错信息是:请求参数的整体大小不能超过2byte。Triedtosendanout-of-rangeintegerasa2-bytevalue:53568这个报错初步看起来,有个“out-of-rangeinteger”,可能大家第一个想到的可能......
  • 同事申请邓白氏码,我却收到谷歌警告案例解析
    近期,一位朋友遇到了一个关于邓白氏码的典型案例,颇具借鉴意义。今天分享出来,希望能够对大家在申请和使用邓白氏码的过程中有所帮助!案例回顾这位朋友的谷歌开发者账号今年10月刚刚完成公司组织资料验证,本以为可以高枕无忧了,可万万没想到,仅仅过了两个多月,12月13号就收到了一份......
  • 【案例实操】Stable Diffusion 将产品白底图变成电商模特场景图全流程思路分享
    大家好我是AIGC阿道夫前言:在电商的视觉战场上,产品展示图的吸引力关乎成败。白底图虽简洁,却难在竞争中脱颖而出。本案例实操将为你揭秘如何利用StableDiffusion扭转乾坤,把单调白底图转化为吸睛的电商模特场景图,开启创意无限的电商视觉营销新篇章。今天分享一下SD模特......
  • 分析一些成功的品牌推广样板市场案例-中小企实战运营和营销工作室博客
    分析一些成功的品牌推广样板市场案例-中小企实战运营和营销工作室博客以下是一些成功的品牌推广样板市场案例,涉及不同行业和品牌类型:一:家电行业——美的在三四线城市及农村市场1,背景:随着一二线城市家电市场逐渐饱和,三四线城市及农村市场成为家电行业新的增长点。美的......
  • 定制 CRM 的4个真实用户案例(帮你选择更灵活CRM产品)
    在数字化转型的浪潮中,CRM系统已成为企业管理客户关系的核心工具。然而,当提到“定制CRM”时,可能会有一些反对的意见,比如这篇来自Nutshell博客的文章WhyBuildingaCustomCRMisaBadIdea,提醒我们,虽然自定义CRM看似能够完美满足企业的独特需求,但实际操作中,定制CRM往往......
  • 客户案例:基于慧集通(DataLinkX)集成平台的金蝶云星空公有云与WMS系统对接集成方案
                    本文档详细介绍了基于慧集通(DataLinkX)集成平台的金蝶云星空公有云与WMS系统对接集成方案。该方案旨在实现金蝶云星空与WMS系统之间的数据同步和流程对接,以提高企业供应链管理的效率和准确性。通过物料、供应商资料同步,采购、销售、生产、仓库......
  • JVM实战—11.OOM的原因和模拟以及案例
    大纲1.线上系统突然由于OOM内存溢出挂掉2.什么是内存溢出及哪些区域会发生内存溢出3.Metaspace如何因类太多而发生内存溢出4.无限制调用方法如何让线程的栈内存溢出5.对象太多导致堆内存实在放不下而内存溢出6.模拟JVMMetaspace内存溢出的场景(动态生成268个类占10M)7.模......
  • 树莓派 Pico RP2040 教程点灯 双核编程案例
    双核点亮不同的LED示例,引脚分别是GP0跟GP1。#include"pico/stdlib.h"#include"pico/multicore.h"#defineLED10//核心0控制的LED引脚#defineLED21//核心1控制的LED引脚//thesetupfunctionrunsoncewhenyoupressresetorpowertheboardvo......