V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
牛客网
simonlu9
V2EX  ›  程序员

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

  •  
  •   simonlu9 · 233 天前 · 7062 次点击
    这是一个创建于 233 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    56 条回复    2020-03-08 10:42:54 +08:00
    opengps
        1
    opengps   233 天前
    视频源服务器的带宽多大?如果带宽够大你不做预加载都感觉不到慢多少
    yorkyoung
        2
    yorkyoung   233 天前
    预加载
    simonlu9
        3
    simonlu9   233 天前
    @opengps 用的是腾讯云视频的 sdk,应该不存在带宽问题
    laminux29
        4
    laminux29   233 天前
    说白了就是钱的问题。

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

    小厂既没有 CDN,又是蜗牛 java 后台,速度怎么会快。
    delectate
        5
    delectate   233 天前
    先说结论:h5 做不到。

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

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

    没误解。

    每种语言都有自己的优劣,在这个问题上,java 就是劣势。
    laminux29
        29
    laminux29   233 天前   ❤️ 1
    @lihailewodeji

    有关系。

    C++与 Java 存在性能上的较为显著的差异,特别是在视频处理上,这种差异会被放大。
    laminux29
        30
    laminux29   233 天前   ❤️ 1
    @GM

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

    你让我 keep learning,我倒想问问你,jre 各版本与 C++在变量自增这个简单问题上的性能差距是多少,你有没有跟踪过?
    laminux29
        31
    laminux29   233 天前   ❤️ 1
    @efaun

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

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

    建议你有空做个在线播放器,包括后台的那种,你就知道这玩意水有多深了。
    laminux29
        35
    laminux29   233 天前
    @itmyhome126

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

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

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

    2.抖音的视频,和优酷、爱奇艺相比,有什么特点?
    laminux29
        47
    laminux29   232 天前
    @GM

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

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

    hls 如果提前分包后台就不需要解码,后台就是个静态 http 服务器,甚至你可以把视频全扔给 cdn。视频的延迟完全取决于服务器带宽和用户的网速。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1455 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 17:18 · PVG 01:18 · LAX 10:18 · JFK 13:18
    ♥ Do have faith in what you're doing.