我尝试使用 MediaCodec 类编码为 VP8/VP9。基本上这是可行的,但使用 UDP 传输生成的数据会在解码时产生许多伪影。这是因为有一些数据包丢失。
我知道 vpxenc 可以选择启用错误恢复。MediaCodec 中是否有此选项?我的希望是减少伪影。我找到了 KEY_INTRA_REFRESH_PERIOD 选项,但我尝试过的设备上的 VP8/VP9 似乎不支持它。
我的设置是:Sony Xperia XZ Premium(Qualcomm MSM8998 Snapdragon 835,Adreno 540)。我使用 MediaCodec 对 VP8/VP9 进行编码,并将数据作为 UDP 数据包传输到运行 ffplay (ffplay udp://0.0.0.0:6000) 或 vlc 的 PC。我在发送前将数据放入 ivf 数据包中。
我还想知道尝试使用 MediaCodec 进行编码是否是一个好主意。我想做的应用程序类似于视频通话应用程序。我对 MediaCodec 输出的编码质量的第一印象并不好。当使用 500kBit 和 640x480 编码时,结果不是很好。尤其是移动凸轮时,质量会大幅下降(h264 也是如此)。我应该更好地直接使用 vpx 库吗?