如何使用Pion/Webrtc将VP8 interframe转换为JPEG图片?
可行方案整理
- 替换VP8解码实现
官方golang.org/x/image/vp8库从设计上仅支持VP8关键帧解码,没有实现帧间依赖的Golden帧、AltRef帧逻辑,无论怎么调整调用逻辑都无法解决报错,可直接替换为封装了libvpx的Go第三方解码库。libvpx是VP8编码的官方参考实现,完整支持所有VP8帧类型,现有Go封装已经做好了C接口适配,不需要自行编写C逻辑即可调用。 - 绕开帧间帧解码需求
如果你可以控制VP8流的推流侧配置,可调整推流端提高关键帧发送频率,仅采集关键帧做JPEG转换,不需要处理帧间帧即可实现截图需求,开发成本最低。 - 调用外部工具转码
不想引入cgo依赖的话可以直接启动ffmpeg子进程做转码,将收到的VP8样本数据按顺序写入ffmpeg的标准输入,指定-f rawvideo或者-f image2pipe输出,从标准输出读取解码后的帧数据或者直接生成的JPEG文件即可。ffmpeg原生支持全量VP8解码能力,你只需要处理进程的IO逻辑,不需要接触解码底层实现,实现速度最快。
原有代码问题说明
你贴出的代码调用逻辑本身没有问题,报错完全来自官方vp8库的功能限制,该库定位就是轻量关键帧解码,不适用于连续流的帧间帧解码场景。
内容的提问来源于stack exchange,提问作者CK So
相关产品推荐
相关产品推荐

