• 请不要在回答技术问题时复制粘贴 AI 生成的内容
simonlu9
V2EX  ›  程序员

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

  •  
  •   simonlu9 · Mar 6, 2020 · 11986 views
    This topic created in 2433 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

    没误解。

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

    有关系。

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

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

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

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

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

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

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

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

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

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

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

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

    hls 如果提前分包后台就不需要解码,后台就是个静态 http 服务器,甚至你可以把视频全扔给 cdn。视频的延迟完全取决于服务器带宽和用户的网速。
    flanche
    flanche
    Aug 25, 2021
    57
    m3u8
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3017 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 90ms · UTC 12:00 · PVG 20:00 · LAX 04:00 · JFK 07:00
    ♥ Do have faith in what you're doing.