使用std::optional替换absl::optional需要包含的头文件
使用std::optional替换absl::optional需要包含的头文件。替换对abseil-cpp开源软件的依赖。
H5网页标准SDP协商日志
WebRTC Internals H5网页标准SDP协商日志信息
x265.exe demo
x265.exe --input black.yuv --input-res 1280x720 xxx.265 --log-level debug
可以查看numa架构打印
webrtc_demo_withlog.tar
webrtc客户端和信令服务器demo,client客户端自动生成日志
vmafossexec.rar
命令行:vmafossexec yuv420p 640 480 ref.yuv test.yuv vmaf_v0.6.1.pkl --psnr --ssim --log test.txt
psnr_ssim_analyzer.exe
一、命令行
psnr_ssim_analyzer.exe --height=480 --width=640 --reference_file=ref.yuv --test_file=test.yuv --results_file=test.csv
二、代码来源及修订记录:
1、该工具是根据webrtc的psnr_ssim_analyzer.cc源码修改,webrtc源码有bug,没有判断文件是否结束。导致计算结果异常。
2、优化写结果格式,可以在excel中打开,进行统计分析。
三、修改webrtc代码点:
bool ExtractFrameFromYuvFile(const char* i420_file_name,
int width,
int height,
int frame_number,
uint8_t* result_frame) {
int frame_size = GetI420FrameSize(width, height);
int64_t offset = frame_number * frame_size; // Calculate offset for the frame.
bool errors = false;
FILE* input_file = fopen(i420_file_name, "rb");
if (input_file == NULL) {
fprintf(stderr, "Couldn't open input file for reading: %s\n",
i420_file_name);
return false;
}
fseek (input_file, 0, SEEK_END);
int64_t file_size = ftell(input_file);
if (offset > file_size)
{
fprintf(stderr, "the end %s frame_number:%d frame_size:%d file_size:%lld offset:%lld\n",
i420_file_name, frame_number, frame_size, file_size, offset);
return false;
}
// Change stream pointer to new offset.
fseek(input_file, offset, SEEK_SET);
size_t bytes_read = fread(result_frame, 1, frame_size, input_file);
if (bytes_read != static_cast(frame_size) &&
ferror(input_file)) {
fprintf(stdout, "Error while reading frame no %d from file %s\n",
frame_number, i420_file_name);
errors = true;
}
fclose(input_file);
return !errors;
}
写日志文件代码
实现日志写文件功能,并且优化日志打印内容,增加时间、文件名、行号信息。
webrtc vp8_rtp抓包样例
在webrtc系统上捕获的VP8无FEC、SRTP的RTP报文,用于VP8协议分析。