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

请教视频流带宽计算的问题

  •  
  •   Juszoe · 2020-11-28 14:40:18 +08:00 · 2045 次点击
    这是一个创建于 1441 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景:观看者不总是完整的观看整个视频,需要计算实际下载的数据量。


    问题:已知观看者观看的帧数序列(如 1-100,103-108 ),并且有原始视频,求总下载的数据量。应当如何计算?有没现成的工具?


    我的尝试:视频使用 H264/H265 编码,使用 ffprobe 解析出每一帧的信息,虽说可以看到每一帧大小了,但是 P 帧需要依赖之前的帧进行解析,在 ffprobe 中并没有看到相关的内容,在这里卡住不知道如何解决了。

    第 1 条附言  ·  2020-11-28 19:04:11 +08:00

    感谢各位v友的回答,实际这只是一个老师安排的小实验,不用想那么多复杂的buffer、协议开销。这个实验目的是为了衡量视频画面切割算法的开销,仅用于比对。

    第 2 条附言  ·  2020-11-28 19:19:06 +08:00
    附上一篇论文 https://dl.acm.org/doi/pdf/10.1145/3123266.3123339
    我想复现论文中 5.2 Client-side Downloaded Volume 部分的实验,但是论文没有给出具体细节
    也许这个问题太简单了...但对音视频新手来说还是有点棘手
    13 条回复    2020-11-28 22:52:22 +08:00
    aru
        1
    aru  
       2020-11-28 16:55:37 +08:00
    平均码率=文件大小 / 时长
    下载数据量=平均码率*观看的时长。

    不过上面计算方法是错误的,实际下载量和观看用到的数据量不相同,不完整观看总是会有下载了没观看的部分
    mingl0280
        2
    mingl0280  
       2020-11-28 18:10:28 +08:00 via Android
    平均码率*(播放时间+缓冲时间)≈总下载数据量
    码率看单帧看不出来的。单帧图像的总和比视频流码率算出来的结果要高一大截……
    misdake
        3
    misdake  
       2020-11-28 18:20:30 +08:00
    P 帧应该是依赖前一个 I 帧,B 帧依赖前后各一个 I 帧。记录好当前 I 帧和下一个 I 帧的位置,随便给你一帧就能找到这一帧依赖的所有帧了。
    不过确实按照 1L 说的,想要知道下载量,只看播放量肯定不行啊,感觉想要真正解决问题还是从下载部分入手比较好。
    cest
        4
    cest  
       2020-11-28 18:27:56 +08:00
    这是考题吧, 实作从 server 下手简单快速方便, 小学生就行了, 以至於没有 kpi

    那计算实际流量还要考虑播放器的 buffer 策略, seek 的消耗, protocol overhead
    你用码率算只能得到被看到的部分其解码所需的数据量

    需要知道出题者脑子想什麽才能知道答案要实际到那
    fredcc
        5
    fredcc  
       2020-11-28 18:28:08 +08:00 via Android
    不说封装传输协议算传输流量好吗。
    Juszoe
        6
    Juszoe  
    OP
       2020-11-28 19:08:24 +08:00
    @misdake #3 P 帧仅仅依赖前一个 I 帧吗,会不会需要其他 P 帧呢,我对这个细节不太了解,能否细说一下。我也想从下载部分入手,有什么程序可以模拟这种行为并统计吗?
    Juszoe
        7
    Juszoe  
    OP
       2020-11-28 19:10:20 +08:00
    @aru #1
    @mingl0280 #2
    需要的精度比较高,最好精确到 KB,只考虑下载的数据量就可以了
    Juszoe
        8
    Juszoe  
    OP
       2020-11-28 19:10:53 +08:00
    @cest #4 老哥想复杂了,就是一个简单的小实验
    Juszoe
        9
    Juszoe  
    OP
       2020-11-28 19:13:14 +08:00
    @fredcc #5 传输协议 emmm...HTTP,DASH 算吗?实际也不用考虑这些啦,只想计算视频封装前的流量
    DoctorCat
        10
    DoctorCat  
       2020-11-28 21:24:14 +08:00
    “这个实验目的是为了衡量视频画面切割算法的开销,仅用于比对。” 你看看,这又是 X-Y Problem
    Juszoe
        11
    Juszoe  
    OP
       2020-11-28 22:20:52 +08:00 via Android
    @DoctorCat 啊这,虽然问题容易让人误解,但也不至于是 X-Y problem 吧,这个问题也是这个领域绕不开的实验,原问题暂时不需要解决
    futou
        12
    futou  
       2020-11-28 22:46:34 +08:00
    你的问题和论文种的不一样。
    你问的问题很复杂,牵扯到实际编码过程是采用 closed GOP 还是 open GOP 的问题。计算要找到关键帧( IDR/CRA 等),编码过程遇到关键帧才会清空参考帧序列,也就是从你需要的最后一帧一直向前到最近的关键帧都具有依赖关系,只有全部传输才能正确解码。这个关键帧并不一定是 I 帧,需要去看你编码器的参数设置,如 HM 的相关参数是 DecodingRefreshType(-dr)。另外,#3 的说法有误导性,P 帧 B 帧的相邻帧并不需要是 I 帧,甚至 B 帧并不需要前后两个参考帧,B 帧也不依赖于后一个 I 帧。

    但是你附言的问题,那个论文似乎并没有涉及到码流的时域切分问题,看起来像是只编码 ROI 区域,这个直接帧比特累加,不过我只是扫了一眼,供参考...
    futou
        13
    futou  
       2020-11-28 22:52:22 +08:00
    #嘴瓢了一个地方,关键帧一定是 I 帧,I 帧并不一定是关键帧...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2573 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 01:38 · PVG 09:38 · LAX 17:38 · JFK 20:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.