V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zhaoxj58
V2EX  ›  问与答

文件下载的问题

  •  
  •   zhaoxj58 · 2020-11-25 09:34:21 +08:00 via iPhone · 1353 次点击
    这是一个创建于 1489 天前的主题,其中的信息可能已经有所发展或是发生改变。

    迫生,老板分配了这样一个任务。

    给前台提供 http 接口,提供 mp4 视频下载功能。 后台需要从对象存储服务中去获取多个 mp4 源文件片段,然后重新编码成一个完整 mp4 文件返回给前端。

    现在的实现方式,先从对象服务中读取所需的源文件片段,然后编成 mp4,再临时存在本地磁盘,然后再读取全部到内存,再通过 http 接口返回给前台,然后删除磁盘文件。

    问题是现在每次请求都有磁盘的读写,然后也是将整个编好的文件读到内存,最后再删除磁盘文件,感觉不是特别好。

    哪位大哥有更好的方案吗,救救孩子

    9 条回复    2020-11-25 14:30:36 +08:00
    pabupa
        1
    pabupa  
       2020-11-25 09:40:24 +08:00 via Android
    302 到 oss 不就行了吗
    jifengg
        2
    jifengg  
       2020-11-25 10:12:41 +08:00
    有碎片的话,建议要么提供 m3u8 给前端(参考爱奇艺),要么给列表给前端(参考腾讯视频)。这种实时合成的太耗 CPU 和 IO 了。
    另外是流量,对象存储直接给到前端( 302 过去),流量不用走服务器,不然服务器的带宽是瓶颈。
    前端没法改的话,只能存的时候合成大文件存了。
    wangkun025
        3
    wangkun025  
       2020-11-25 10:17:30 +08:00
    只能这样吧。
    前端先提交任务,你这边合成好之后,让他们下载,下载完可以直接删除,也可以手工删除。
    zhaoxj58
        4
    zhaoxj58  
    OP
       2020-11-25 10:47:41 +08:00
    @jifengg 嗯,要求提供两种可选格式的,一种是 m3u8,一种是 mp4
    zhaoxj58
        5
    zhaoxj58  
    OP
       2020-11-25 10:48:20 +08:00
    @pabupa 直接 302 过去,没法做视频合成了
    jifengg
        6
    jifengg  
       2020-11-25 10:49:27 +08:00
    @zhaoxj58 那就实际问题实际解决。总之,虽然实时合成是可以做到的,但实在是不推荐的。
    VHacker1989
        7
    VHacker1989  
       2020-11-25 12:00:13 +08:00
    为什么要写回磁盘呢,直接返回不就行了。而且 http 协议本身支持 range,从 oss 取到后算好 range 直接返回前端就行了,合并都不用
    nikandaoleshenme
        8
    nikandaoleshenme  
       2020-11-25 13:39:44 +08:00
    初次下载完后,将生成的新文件上传到 OSS,下次碰到相同的请求重定向到 OSS 上去
    kuro1
        9
    kuro1  
       2020-11-25 14:30:36 +08:00
    OSS 流量+服务器流量 费用成本有点高
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3099 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:26 · PVG 21:26 · LAX 05:26 · JFK 08:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.