问下大家短视频实现秒开一般用什么方案的 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
simonlu9
V2EX    程序员

问下大家短视频实现秒开一般用什么方案的

  •  
  •   simonlu9 2020-03-06 09:23:14 +08:00 11131 次点击
    这是一个创建于 2121 天前的主题,其中的信息可能已经有所发展或是发生改变。

    新到的公司要搞短视频,之前没搞过这块,现在用 h5 搞发现切换总是有延迟,卡个两三秒,看过大厂的做法都是自己定义播放 sdk,预加载,本地代理,但实在是时间有限,问下有没有一些开源方案。

    57 条回复    2021-08-25 10:59:25 +08:00
    opengps
        1
    opengps  
       2020-03-06 09:25:19 +08:00
    视频源服务器的带宽多大?如果带宽够大你不做预加载都感觉不到慢多少
    yorkyoung
        2
    yorkyoung  
       2020-03-06 09:31:35 +08:00
    预加载
    simonlu9
        3
    simonlu9  
    OP
       2020-03-06 09:40:46 +08:00
    @opengps 用的是腾讯云视频的 sdk,应该不存在带宽问题
    laminux29
        4
    laminux29  
       2020-03-06 09:40:48 +08:00
    说白了就是钱的问题。

    大厂是就近 CDN,并且 CDN 整套后台都是 C++。

    小厂既没有 CDN,又是蜗牛 java 后台,速度怎么会快。
    delectate
        5
    delectate  
       2020-03-06 09:42:00 +08:00
    先说结论:h5 做不到。

    再说原理:根据你的选择,生成一个动态的列表,因为你只有三个选择:上一个、下一个、退出。
    只要预加载下一个就行了。
    simonlu9
        6
    simonlu9  
    OP
       2020-03-06 09:46:00 +08:00
    @delectate 我也觉得 h5 做不到,提供的 api 根本做不到上面的优化,如果又改善,估计只有用原生的 api
    lzihua
        7
    lzihua  
       2020-03-06 10:36:31 +08:00
    @delectate H5 做不到 只能原生 预加载下一个视频
    ETiV
        8
    ETiV  
       2020-03-06 10:41:22 +08:00 via iPhone
    不信 h5 做不到
    但是 iOS 不让纯 webview 的 app 上架
    afpro
        9
    afpro  
       2020-03-06 10:41:22 +08:00
    @laminux29 感觉你对 java 有误解。。。。。。
    lihailewodeji
        10
    lihailewodeji  
       2020-03-06 10:42:50 +08:00
    @laminux29 这和后台什么语言有什么关系
    Jooooooooo
        11
    Jooooooooo  
       2020-03-06 10:44:34 +08:00
    预加载
    xsen
        12
    xsen  
       2020-03-06 10:48:31 +08:00
    是否秒开,跟采用的语言,是不是 h5 没有关系。关键是流媒体传输的方式,若是传统的直播类协议,如 hls、rtmp 这些,延迟 2-3s 是正常的情况

    若要秒开,可以直接基于 rtp/rtcp 进行传输,或者采用 webrtc 这样的方式
    GM
        13
    GM  
       2020-03-06 10:49:28 +08:00
    @laminux29 你这都什么年代的观念了,keep learning 啊同学。
    fgodt
        14
    fgodt  
       2020-03-06 10:56:53 +08:00 via Android
    预加载 H5 使用 MSE 喂数据就可以了 不过需要自己开发个播放器
    fancy111
        15
    fancy111  
       2020-03-06 11:15:59 +08:00
    啥的秒开不秒开啊,很多用的障眼法而已。 要么就是带宽管够。
    efaun
        16
    efaun  
       2020-03-06 11:28:01 +08:00
    @laminux29 #4 你这个观念还停留在上个世纪 80 年代吧
    KuroNekoFan
        17
    KuroNekoFan  
       2020-03-06 11:30:30 +08:00
    hls 分片越小响应速度越快吧,tradeoff,衡量一下呗
    simonlu9
        18
    simonlu9  
    OP
       2020-03-06 11:33:10 +08:00
    @KuroNekoFan 试过 m3u8,对比过不明显
    tongyang
        19
    tongyang  
       2020-03-06 12:00:23 +08:00
    预加载,还有就是可以根据当前带宽加载不同码率的,一般为了 kpi 前三秒都是地滑知的
    tongyang
        20
    tongyang  
       2020-03-06 12:00:28 +08:00
    低画质
    surewen
        21
    surewen  
       2020-03-06 12:01:47 +08:00   1
    秒开很简单,预加载数据就行。不够快就预解封装、解码,还不够快就再加上预渲染
    run2
        22
    run2  
       2020-03-06 12:38:43 +08:00
    h5 一样可以预加载啊 可以把视频 切 2 片,前部分 2~3s 预加载,2~3s 耗费又不大,在播放这部分时加载下一部分
    DoveAz
        23
    DoveAz  
       2020-03-06 13:18:17 +08:00   1
    https://demo.doveaz.xyz/ 5m 小水管,别点下一个太快,就不卡,使用了高端大气的障眼法技术
    tengyoubiao
        24
    tengyoubiao  
       2020-03-06 13:37:10 +08:00 via Android
    @DoveAz 都挤进去,加载不出来了
    rrfeng
        25
    rrfeng  
       2020-03-06 13:59:22 +08:00
    楼上基本上没说到点子上的。
    如果是公司业务的话,直接去找你们的 CDN 提供商,他们可以给你提供建议和支持。
    zyEros
        26
    zyEros  
       2020-03-06 14:36:27 +08:00
    H5 可以做到的,比如这个: http://h5.haohuimai1.com/#/
    使用了 WXInlinePlayer 这个库
    Semidio
        27
    Semidio  
       2020-03-06 16:03:24 +08:00
    DASH
    laminux29
        28
    laminux29  
       2020-03-06 17:27:42 +08:00   1
    @afpro

    没误解。

    每种语言都有自己的优劣,在这个问题上,java 就是劣势。
    laminux29
        29
    laminux29  
       2020-03-06 17:29:00 +08:00   1
    @lihailewodeji

    有关系。

    C++与 Java 存在性能上的较为显著的差异,特别是在视频处理上,这种差异会被放大。
    laminux29
        30
    laminux29  
       2020-03-06 17:30:57 +08:00   1
    @GM

    无论什么年代,C++与 Java 在性能问题上都存在差异,这是语言特性注定的。

    你让我 keep learning,我倒想问问你,jre 各版本与 C++在变量自增这个简单问题上的性能差距是多少,你有没有跟踪过?
    laminux29
        31
    laminux29  
       2020-03-06 17:34:04 +08:00   1
    @efaun

    那你把最新世纪,最新年代,最新版本的 jre 或 jdk,与 C++在变量自增这个简单问题上的性能差距,做个简单的性能对比测试?
    luffyt
        32
    luffyt  
       2020-03-06 17:42:33 +08:00
    @laminux29 看视频需要处理视频么??
    itmyhome126
        33
    itmyhome126  
       2020-03-06 17:44:58 +08:00
    @laminux29 看你说了这么多, 你倒是贴个对比图啊, 是你说 java 慢的
    laminux29
        34
    laminux29  
       2020-03-06 17:57:43 +08:00
    @luffyt

    你是不是觉得,在线看视频的本质,就是浏览器下载视频文件?

    建议你有空做个在线播放器,包括后台的那种,你就知道这玩意水有多深了。
    laminux29
        35
    laminux29  
       2020-03-06 17:59:15 +08:00
    @itmyhome126

    我把关键都说了,居然还要我去贴图,你咋不上天呢?
    luffyt
        36
    luffyt  
       2020-03-06 18:33:44 +08:00
    @laminux29 我看抖音也是直接返视频文件地址的,带水印的、不带水印的等等
    GM
        37
    GM  
       2020-03-06 21:33:28 +08:00
    @laminux29
    我不会去跟踪这种见树木不见森林的行为。
    你说的这种场景叫做“计算密集型”,楼主说的这种场景属于“IO 密集型”,跟你一个自变量自增速度基本没关系。
    GM
        38
    GM  
       2020-03-06 21:37:31 +08:00
    @laminux29 水再深,也不会影响播放速度。影响速度最大的原因在于网速,也就是 IO,而不是什么变量自增速度快慢。

    楼主碰到的问题,根源在于他没有做“预加载”,跟后台是 C 艹还是 C 井还是 Java 基本没关系。
    wdlth
        39
    wdlth  
       2020-03-06 22:28:07 +08:00
    可以通过一个小文件预载起始的部分,Google Developers 有说明:
    https://developers.google.com/web/fundamentals/media/fast-playback-with-video-preload
    ljpCN
        40
    ljpCN  
       2020-03-07 00:54:54 +08:00 via Android
    CDN+转码+预加载?
    FS1P7dJz
        41
    FS1P7dJz  
       2020-03-07 01:43:59 +08:00
    每个视频有个预览图
    预览图直接在滑下一个的瞬间弹出来
    之后才播放视频
    视频提前缓冲到本地
    mumbler
        42
    mumbler  
       2020-03-07 06:42:40 +08:00 via Android
    视频多长,体积多大? mp4 有一个 head,必须加载完 head 数据才能开始播放,所以越小视频 head 小,开播速度越快。把视频压缩小一些,用质量换速度
    linhongye
        43
    linhongye  
       2020-03-07 09:09:54 +08:00 via Android
    前端去预加载, 后端不用改
    leon0318
        44
    leon0318  
       2020-03-07 10:03:30 +08:00 via iPhone
    CDN
    预加载
    newmlp
        45
    newmlp  
       2020-03-07 11:12:58 +08:00
    秒开只能预加载
    laminux29
        46
    laminux29  
       2020-03-07 15:23:08 +08:00
    @luffyt

    1.直接返回一个文件地址很正常。

    2.抖音的视频,和优酷、爱奇艺相比,有什么特点?
    laminux29
        47
    laminux29  
       2020-03-07 15:29:07 +08:00
    @GM

    你还是先做个视频播放器,再来谈这些问题吧,不然你现在什么经验都没有,评论全靠想象力?
    GM
        48
    GM  
       2020-03-07 15:58:44 +08:00
    @laminux29
    你怎么知道我没做过视频播放器?
    直播确实没做过,本地播放做过(基于开源项目修修改改就成了自己用的了)。
    然后呢?卡几秒跟后台是 C 艹还是 Java 有一毛钱关系吗?

    我估计你的意思是“在线转码对计算量要求非常高,所以只有 C 艹才能胜任”。
    afeicool
        49
    afeicool  
       2020-03-07 17:15:45 +08:00
    @laminux29 小兄弟,慎言啊
    laminux29
        50
    laminux29  
       2020-03-07 17:45:34 +08:00
    @GM 这里是讨论 h5 网页播放器,不是本地播放器。
    laminux29
        51
    laminux29  
       2020-03-07 17:45:58 +08:00
    @afeicool 一个技术问题有啥慎不慎言的。
    GM
        52
    GM  
       2020-03-07 21:26:35 +08:00
    @laminux29 大神,你做过什么牛逼项目,说说嘛。别告诉我还在读大学哦
    geekvcn
        53
    geekvcn  
       2020-03-08 05:39:41 +08:00 via Android
    限制 h5 的话,最简单的方式就是 quic
    aguesuka
        54
    aguesuka  
       2020-03-08 09:40:52 +08:00 via Android
    我干过摄像头的项目,在我走后安卓端改从 rtsp 改成 hls(理论 rtsp 更快但是既然选择了 hls 那说明 h5 是可以接受的),mp4 的视频放在 cdn 上,加上视频清晰度不高只给内部用,按照同事的说法就是秒开。
    aguesuka
        55
    aguesuka  
       2020-03-08 09:53:34 +08:00 via Android
    @simonlu9 hls 协议是下一个.ts 和.m3u8 文件,第一段视频的 io 时间就是两次 http 请求,你把每段视频的大小控制在 1m 试试?可以用 ffmpeg 推流到 nginx 上,环境搭起来很简单,选择合适的参数,全程只要部署改配置文件运行。
    aguesuka
        56
    aguesuka  
       2020-03-08 10:42:54 +08:00
    https://s2.ax1x.com/2020/03/08/3vRQfA.jpg
    https://s2.ax1x.com/2020/03/08/3vRKFH.jpg

    hls 如果提前分包后台就不需要解码,后台就是个静态 http 服务器,甚至你可以把视频全扔给 cdn。视频的延迟完全取决于服务器带宽和用户的网速。
    flanche
        57
    flanche  
       2021-08-25 10:59:25 +08:00
    m3u8
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2567 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 43ms UTC 14:57 PVG 22:57 LAX 06:57 JFK 09:57
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86