对于采集视频的C程序,有时需要知道当前视频的实时码率,可以用以下片段实现打印。
#define SHOW_BITRATE
#define FRM_BIT_RATE_TIME 3
#define STREAM_TYPE_NUM 3
static unsigned short frmrate_sp[STREAM_TYPE_NUM] = { 0 };
static unsigned short statime_sp[STREAM_TYPE_NUM] = { 0 };
static unsigned short bitrate_sp[STREAM_TYPE_NUM] = { 0 };
#ifdef SHOW_BITRATE
int chnNum = m_devId;
bitrate_sp[chnNum] += nSize;
frmrate_sp[chnNum]++;
struct timeval start;
gettimeofday(&start, NULL);
unsigned short now = start.tv_sec * 1000 + start.tv_usec / 1000;
if (((now - statime_sp[chnNum]) / 1000) >= FRM_BIT_RATE_TIME)
{
double fps = (double)frmrate_sp[chnNum] / ((double)(now - statime_sp[chnNum]) / 1000);
double kbr = (double)bitrate_sp[chnNum] * 8 / (double)(now - statime_sp[chnNum]);
printf("dev:%d,framerate:%0.2f,bitrate:%0.2f(kbps)\n",m_devId,fps,kbr);
frmrate_sp[chnNum] = 0;
bitrate_sp[chnNum] = 0;
statime_sp[chnNum] = now;
}
#endif