AWS WebRTC:根据viewer端拉流日志推算视频帧率和音频帧率

发布于:2025-07-04 ⋅ 阅读:(20) ⋅ 点赞:(0)

viewer端拉流日志是这样的:

 07:19:26.263 VERBOSE sampleAudioFrameHandler(): Audio Frame received. TrackId: 140092278368896, Size: 160, Flags 3210729368
2025-06-12 07:19:26.283 VERBOSE sampleAudioFrameHandler(): Audio Frame received. TrackId: 140092278368896, Size: 160, Flags 3210729368
2025-06-12 07:19:26.298 VERBOSE sampleVideoFrameHandler(): Video Frame received. TrackId: 140092278368896, Size: 4458, Flags 3210729368
2025-06-12 07:19:26.303 VERBOSE sampleAudioFrameHandler(): Audio Frame received. TrackId: 140092278368896, Size: 160, Flags 3210729368
2025-06-12 07:19:26.323 VERBOSE sampleAudioFrameHandler(): Audio Frame received. TrackId: 140092278368896, Size: 160, Flags 3210729368
2025-06-12 07:19:26.338 VERBOSE sampleVideoFrameHandler(): Video Frame received. TrackId: 140092278368896, Size: 263, Flags 3210729368
2025-06-12 07:19:26.343 VERBOSE sampleAudioFrameHandler(): Audio Frame received. TrackId: 140092278368896, Size: 160, Flags 3210729368
2025-06-12 07:19:26.363 VERBOSE sampleAudioFrameHandler(): Audio Frame received. TrackId: 140092278368896, Size: 160, Flags 3210729368
2025-06-12 07:19:26.378 VERBOSE sampleVideoFrameHandler(): Video Frame received. TrackId: 140092278368896, Size: 314, Flags 3210729368
2025-06-12 07:19:26.383 VERBOSE sampleAudioFrameHandler(): Audio Frame received. TrackId: 140092278368896, Size: 160, Flags 3210729368
2025-06-12 07:19:26.403 VERBOSE sampleAudioFrameHandler(): Audio Frame received. TrackId: 140092278368896, Size: 160, Flags 3210729368
2025-06-12 07:19:26.418 VERBOSE sampleVideoFrameHandler(): Video Frame received. TrackId: 140092278368896, Size: 825, Flags 3210729368
2025-06-12 07:19:26.423 VERBOSE sampleAudioFrameHandler(): Audio Frame received. TrackId: 140092278368896, Size: 160, Flags 3210729368
2025-06-12 07:19:26.443 VERBOSE sampleAudioFrameHandler(): Audio Frame received. TrackId: 140092278368896, Size: 160, Flags 3210729368
2025-06-12 07:19:26.458 VERBOSE sampleVideoFrameHandler(): Video Frame received. TrackId: 140092278368896, Size: 1066, Flags 3210729368
2025-06-12 07:19:26.463 VERBOSE sampleAudioFrameHandler(): Audio Frame received. TrackId: 140092278368896, Size: 160, Flags 3210729368
2025-06-12 07:19:26.484 VERBOSE sampleAudioFrameHandler(): Audio Frame received. TrackId: 140092278368896, Size: 160, Flags 3210729368
2025-06-12 07:19:26.498 VERBOSE sampleVideoFrameHandler(): Video Frame received. TrackId: 140092278368896, Size: 1029, Flags 3210729368
2025-06-12

如何从这样的拉流日志中推算出视频帧率和音频帧率呢?

首先要获取足够的样本

比如获取300条视频帧日志:

grep -i 'Video Frame received' viewer_channel_index_20250612_071920_039.log | head -n 300
  • 先用 grep 过滤出所有匹配行
  • 再用 head -n 300 只显示前300条结果

之后在上面命令得到的结果基础上,过滤出每行日志前面的日期和时间,例如,2025-06-12 07:19:42.138

grep -i 'Video Frame received' viewer_channel_index_20250612_071920_039.log | head -n 300 | awk '{print $1, $2}'
  • awk ‘{print $1, $2}’ 打印每行的第1和第2列,也就是日期和时间(空格分隔)

得到的结果是:

2025-06-12 07:19:38.738
2025-06-12 07:19:38.778
...
2025-06-12 07:19:50.698

计算步骤

第一帧时间:07:19:38.738
最后一帧时间:07:19:50.698

先把时间转换成秒:
07:19:38.738 → 73600 + 1960 + 38.738 = 26378.738秒
07:19:50.698 → 73600 + 1960 + 50.698 = 26390.698秒

时间差 = 26390.698 - 26378.738 = 11.96秒

我取了 300 条时间戳,所以,帧数 = 300

帧率 = 帧数 / 时间差 = 300 / 11.96 ≈ 25.08 fps

据此推算视频流的平均帧率大约是 25 fps。

如果视频帧率是 25 fps(frames per second),那么每一帧之间的理论时间间隔为:

1 秒 / 25= 0.04= 40 毫秒

帧率为 25fps → 理想帧间隔是 40ms

允许波动 ±20%:

40ms * 0.8 = 32ms(下限)

40ms * 1.2 = 48ms(上限)

所以,

lower=32
upper=48

是一个 合理、宽容但不松散 的时间间隔判断范围,可以用来判断是否稳定达到了 25fps。

音频帧的日志取样为:

07:19:38.699
07:19:38.719
07:19:38.740
07:19:38.760
07:19:38.780
07:19:38.800
...

音频帧之间的间隔大多为 20ms 左右,所以:

1 秒 / 0.02 秒(20ms) = 50 帧每秒

音频帧率 ≈ 50 fps

允许波动 ±20%:

20ms * 0.8 = 16ms(下限)

20ms * 1.2 = 24ms(上限)

所以,

lower=16
upper=24

网站公告

今日签到

点亮在社区的每一天
去签到