V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Sponsored by
LinkedIn
不坐班的神仙工作 · 去任何你想去的地方远程,赚一线城市的工资
2000 个不用出门 Social 的全球远程工作,帮助 V2EX 的小伙伴开启全新的工作方式。
Promoted by LinkedIn
codebigbang
V2EX  ›  程序员

求助:关于视频播放的方案

  •  
  •   codebigbang · 2019-11-17 18:22:32 +08:00 via Android · 2238 次点击
    这是一个创建于 1048 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目是 spring,目前功能是上传 mp4 文件,播放的时候是从后端读取文件流,放到前端 video 标签里。

    但是播放的视频文件大于 30M 的时候,浏览器加载就会变得很慢,如果播放大于 100M 就无法短时间内一次性加载到前端。

    目前的方案是想利用 video 下的 source 标签,但是使用文件流就无法播放。

    请问各位经验丰富的大佬,有没有成熟的方案可以提供吗?网页链接也可以。不胜感激

    12 条回复    2019-11-18 22:36:23 +08:00
    av1254
        1
    av1254  
       2019-11-17 18:32:48 +08:00
    m3u8 了解一下
    codebigbang
        2
    codebigbang  
    OP
       2019-11-17 19:41:48 +08:00 via Android
    @av1254 不懂就问~
    请问把 mp4 切片以后,是不是只要控制器里处理 m3u8 请求和 ts 请求就可以了?
    cst4you
        3
    cst4you  
       2019-11-17 19:41:51 +08:00
    flvjs, 用 flv 格式, 关闭 lazyload, 可以一次加载完

    https://www.beatstage.com/play/400
    我自己的音游用这种模式来加载视频, 因为是游戏肯定就不可能边放边播, 缓冲不足了卡住那就很尴尬了
    duan602728596
        4
    duan602728596  
       2019-11-17 23:53:26 +08:00 via iPhone
    你的服务不支持 HTTP 206 吗?
    againstodds
        5
    againstodds  
       2019-11-18 08:39:43 +08:00
    了解下 ffmpeg -movflags faststart
    视频文件可以不需要全部下载完再播放,可以边下载边播放
    Latin
        6
    Latin  
       2019-11-18 10:26:17 +08:00
    有钱就上 nvr
    codebigbang
        7
    codebigbang  
    OP
       2019-11-18 14:57:22 +08:00
    方案总结:
    1、使用 m3u8,把 MP4 切成 m3u8 和若干 ts 文件。我的问题是处理 m3u8 和 ts 请求是自己处理吗?@av1254
    2、关于 HTTP 206,range 之后获取的数据可以直接播放吗?@duan602728596
    3、关于 flv,有详细的教程或者链接吗?拜托了 @cst4you
    Latin
        8
    Latin  
       2019-11-18 15:11:13 +08:00
    duan602728596
        9
    duan602728596  
       2019-11-18 15:52:29 +08:00 via iPhone
    @codebigbang 当然可以
    cst4you
        10
    cst4you  
       2019-11-18 19:21:53 +08:00
    codebigbang
        11
    codebigbang  
    OP
       2019-11-18 21:22:09 +08:00 via Android
    @duan602728596 我之前尝试过把读取的 base64 编码的数据拼接在之前已经存在的 video src 里,但是这样会导致正在播放的播放器彻底加载不出来视频数据。
    所以想请问一下后台读取过来的数据是怎么保证不卡顿加载上去的?
    duan602728596
        12
    duan602728596  
       2019-11-18 22:36:23 +08:00
    @codebigbang 主要是这个东西,别人的文章拿过来你可以看看,https://dabing1022.github.io/2016/12/24/%E8%81%8A%E4%B8%80%E8%81%8AHTTP%E7%9A%84Range,%20Content-Range/。比如有个 5 分钟的视频,你跳到 3 分钟的时候,如果你的服务支持这个的话,是不会把三分钟之前的视频也加载过来的。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2014 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 07:09 · PVG 15:09 · LAX 00:09 · JFK 03:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.