我正在使用 RTP 流式传输 H.264(libx264) 视频。我想比较 h.264 中不同的错误恢复方法。在一些研究论文中,psnr被用来比较它们。所以我想知道如何在流式传输期间计算 h.264 视频的 psnr。
问问题
2185 次
1 回答
1
要计算 PSNR,您必须比较两帧,因此第一步是确保您拥有源视频的副本。接下来,您必须能够以 1:1 的比例匹配帧。因此,如果丢帧,您需要将源帧与前一个流式帧进行比较。如果时间戳不匹配(它们可能被 RTP 服务器修改),这可能会很困难。接下来将每一帧解码成它的 YUV 通道。通道的 PSNR 需要独立计算。您可以在最后平均三个 PSNR 值,但这会给 U、V 通道带来过多的权重。我建议只使用 Y 通道,因为它是最重要的。而且由于您正在测量数据包丢失,因此这些值无论如何都将是强相关的。
接下来计算您的均方误差,如下所示:
int64_t mse = 0;
for(int x = 0 ; x < frame.width ; ++x ) {
for(int y = 0 ; y < frame.height ; ++y ) {
mse += pow( source_frame[x][y] - streamed_frame[x][y], 2 );
}}
mse *= 1.0/(frame.width*frame.height);
最后:
/* use 219 instead of 255 if you know your colorspace is BT.709 */
double psnr = 20 * log10( 255 ) - 10 * log10( mse );
您可以将每帧 PSNR 平均在一起以获得完整的流 PSNR。
于 2014-01-03T17:36:40.147 回答