背景:观看者不总是完整的观看整个视频,需要计算实际下载的数据量。
问题:已知观看者观看的帧数序列(如 1-100,103-108 ),并且有原始视频,求总下载的数据量。应当如何计算?有没现成的工具?
我的尝试:视频使用 H264/H265 编码,使用 ffprobe 解析出每一帧的信息,虽说可以看到每一帧大小了,但是 P 帧需要依赖之前的帧进行解析,在 ffprobe 中并没有看到相关的内容,在这里卡住不知道如何解决了。
感谢各位v友的回答,实际这只是一个老师安排的小实验,不用想那么多复杂的buffer、协议开销。这个实验目的是为了衡量视频画面切割算法的开销,仅用于比对。
1
aru 2020-11-28 16:55:37 +08:00
平均码率=文件大小 / 时长
下载数据量=平均码率*观看的时长。 不过上面计算方法是错误的,实际下载量和观看用到的数据量不相同,不完整观看总是会有下载了没观看的部分 |
2
mingl0280 2020-11-28 18:10:28 +08:00 via Android
平均码率*(播放时间+缓冲时间)≈总下载数据量
码率看单帧看不出来的。单帧图像的总和比视频流码率算出来的结果要高一大截…… |
3
misdake 2020-11-28 18:20:30 +08:00
P 帧应该是依赖前一个 I 帧,B 帧依赖前后各一个 I 帧。记录好当前 I 帧和下一个 I 帧的位置,随便给你一帧就能找到这一帧依赖的所有帧了。
不过确实按照 1L 说的,想要知道下载量,只看播放量肯定不行啊,感觉想要真正解决问题还是从下载部分入手比较好。 |
4
cest 2020-11-28 18:27:56 +08:00
这是考题吧, 实作从 server 下手简单快速方便, 小学生就行了, 以至於没有 kpi
那计算实际流量还要考虑播放器的 buffer 策略, seek 的消耗, protocol overhead 你用码率算只能得到被看到的部分其解码所需的数据量 需要知道出题者脑子想什麽才能知道答案要实际到那 |
5
fredcc 2020-11-28 18:28:08 +08:00 via Android
不说封装传输协议算传输流量好吗。
|
6
Juszoe OP @misdake #3 P 帧仅仅依赖前一个 I 帧吗,会不会需要其他 P 帧呢,我对这个细节不太了解,能否细说一下。我也想从下载部分入手,有什么程序可以模拟这种行为并统计吗?
|
10
DoctorCat 2020-11-28 21:24:14 +08:00
“这个实验目的是为了衡量视频画面切割算法的开销,仅用于比对。” 你看看,这又是 X-Y Problem
|
11
Juszoe OP @DoctorCat 啊这,虽然问题容易让人误解,但也不至于是 X-Y problem 吧,这个问题也是这个领域绕不开的实验,原问题暂时不需要解决
|
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 区域,这个直接帧比特累加,不过我只是扫了一眼,供参考... |
13
futou 2020-11-28 22:52:22 +08:00
#嘴瓢了一个地方,关键帧一定是 I 帧,I 帧并不一定是关键帧...
|