V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
zhaoxj58
V2EX  ›  问与答

文件下载的问题

  •  
  •   zhaoxj58 · Nov 25, 2020 via iPhone · 1868 views
    This topic created in 1983 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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