V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
lslqtz
V2EX  ›  JavaScript

使用 js 读一个视频文件并转为 blob,但是不能边载边播。

  •  
  •   lslqtz · 2016-12-18 22:12:14 +08:00 · 9389 次点击
    这是一个创建于 2657 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有什么方法能够解决这个问题,现在使用的是 XMLHttpRequest 。主要是想分段加载一些流媒体 =w=。
    第 1 条附言  ·  2016-12-19 21:16:22 +08:00
    #4
    https://www.npmjs.com/package/videostream
    #19
    播放 flv 文件: flv.js 。
    播放 m3u8 分片列表:使用 hls.js 。
    MSE+XMLHttpRequest 加载流媒体:参阅 flv.js 源码 src/io/xhr-range-loader.js 以及 src/core/mse-controller.js 。
    21 条回复    2019-10-19 17:51:58 +08:00
    bzw875
        1
    bzw875  
       2016-12-18 22:25:02 +08:00 via iPhone   ❤️ 1
    看 bilibili 的开源项目 flv.js 应该有帮助
    lslqtz
        2
    lslqtz  
    OP
       2016-12-18 22:26:41 +08:00 via iPhone
    @bzw875 看不懂 T_T
    我也觉得有帮助 所以提问之前看过 github
    Lpl
        3
    Lpl  
       2016-12-18 23:10:04 +08:00 via Android
    m3u8 格式的应该可以分段吧
    binux
        4
    binux  
       2016-12-18 23:16:20 +08:00   ❤️ 1
    lslqtz
        5
    lslqtz  
    OP
       2016-12-19 00:12:36 +08:00
    @binux 这个直接在浏览器运行不能用。。 npm 不是 nodejs 的包管理器么。。
    这个看起来没问题,不过 js 新手表示不懂
    Roycom
        6
    Roycom  
       2016-12-19 01:14:26 +08:00 via iPhone
    标记一下
    tabris17
        7
    tabris17  
       2016-12-19 01:22:37 +08:00 via iPhone
    可以, youtube 的播放器就是这么干的
    binux
        8
    binux  
       2016-12-19 01:29:45 +08:00   ❤️ 2
    @lslqtz 你需要 browserify
    lslqtz
        9
    lslqtz  
    OP
       2016-12-19 13:25:00 +08:00
    @binux 试了试,结果找不到模块懵逼了。。
    echo "var videostream=require('videostream');" > 1.js && npm install -g npm && npm install -g videostream && node 1.js
    然后就看到这个。。 Cannot find module 'videostream'
    lslqtz
        10
    lslqtz  
    OP
       2016-12-19 13:26:28 +08:00
    @binux 好吧,是我的-g 参数。。
    lslqtz
        11
    lslqtz  
    OP
       2016-12-19 13:30:51 +08:00
    @binux 然后我用示例直接报错了。。
    var elem = document.createElement('video');
    lslqtz
        12
    lslqtz  
    OP
       2016-12-19 13:30:57 +08:00
    ReferenceError: document is not defined
    2zH
        13
    2zH  
       2016-12-19 15:01:09 +08:00
    官网原话是: npm is the package manager for JavaScript.
    2zH
        14
    2zH  
       2016-12-19 15:02:33 +08:00
    @lslqtz 咦 你是在浏览器运行报的错吗。(ReferenceError: document is not defined)
    lslqtz
        15
    lslqtz  
    OP
       2016-12-19 15:18:43 +08:00
    @2zH 我运行 node 1.js > 2.js 报的错...
    浏览器运行就是 require 报错
    2zH
        16
    2zH  
       2016-12-19 15:57:09 +08:00   ❤️ 1
    @lslqtz document 是浏览器上定义的一个 Object ,所以肯定不是 node 直接执行。 require 报错这个问题,你需要找一个打包工具来帮你做这个 require 操作。

    先执行 npm install 安装 package.js 中的对应依赖,然后运行打包工具把 index.js 跟 index.js require 的其他库打包成一个文件,然后插入 html 文件中。

    打包工具有楼上说的 browserify ,也有 webpack 等等。
    lslqtz
        17
    lslqtz  
    OP
       2016-12-19 16:15:43 +08:00
    @2zH js 渣表示非常感谢~,把 require 的库打包成一个文件后在浏览器中直接使用吗。
    2zH
        18
    2zH  
       2016-12-19 16:23:46 +08:00   ❤️ 1
    @lslqtz

    是的是的, html 直接 src 进去。
    另:头像好眼熟 233
    royzxq
        19
    royzxq  
       2016-12-19 19:20:54 +08:00   ❤️ 1
    如果单纯想播放 mp4 文件, video src 里直接添加就好。
    如果想播放 flv 文件, 请使用 flv.js 。
    如果想播放 m3u8 分片列表, 请使用 hls.js 。
    如果想使用 MSE + XMLHttpRequest 加载流媒体, 请参阅 flv.js 源码 src/io/xhr-range-loader.js 以及 src/core/mse-controller.js
    lslqtz
        20
    lslqtz  
    OP
       2016-12-19 21:14:50 +08:00
    @royzxq 好评
    最后两个对我有帮助,感谢~
    zionHH
        21
    zionHH  
       2019-10-19 17:51:58 +08:00
    您好?这个问题是怎么解决的?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   956 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 21:46 · PVG 05:46 · LAX 14:46 · JFK 17:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.