【关键字】
视频硬解 / 解码器 / PPS / SPS / annexb
【问题描述】
OpenHarmony / multimedia_av_codec的仓库地址:https://gitee.com/openharmony/multimedia_av_codec/blob/master/
info.flags = AVCODEC_BUFFER_FLAGS_NONE;
if (isFirstFrame_) {
info.flags = AVCODEC_BUFFER_FLAGS_CODEC_DATA;
isFirstFrame_ = false;
}int32_t ret = OH_VideoDecoder_PushInputData(videoDec_, index, info);
1、每个关键帧前,都必须需要设置AVCODEC_BUFFER_FLAGS_CODEC_DATA吗?有没有统一的解码器PPS、SPS信息设置的API调用?
2、PPS/SPS数据和视频帧数据都只能通过OH_VideoDecoder_PushInputData设置吗?AnnexB格式的关键帧packet前面都会带有PPS/SPS数据,那这种情况如何处理?
3、每个关键帧调用OH_VideoDecoder_PushInputData,都必须设置AVCODEC_BUFFER_FLAGS_CODEC_DATA吗?如果视频流中清晰度发生变化,会受到一个OnStreamChanged的回调,这个是解码器的内部检测逻辑触发的,是否依赖AVCODEC_BUFFER_FLAGS_CODEC_DATA标志?
4、对于annexb格式的码流,在OH_VideoDecoder_PushInputData的时候,是否需要设置AVCODEC_BUFFER_FLAGS_CODEC_DATA?
【解决方案】
1、可使用OH_VideoDecoder_PushInputData 来传递。
可参考文档描述:
使用方法可参考:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/video-decoding-0000001822282761
2、关键帧上的PPS/SPS可以和关键帧一起传进去。
3、AVCODEC_BUFFER_FLAGS_CODEC_DATA可以设置一次,也可以设置多次比如flush之后要重新传。清晰度发生变化,会受到一个OnStreamChanged的回调,不依赖VCODEC_BUFFER_FLAGS_CODEC_DATA标志。
4、对于annexb格式的码流,在OH_VideoDecoder_PushInputData的时候需要设置AVCODEC_BUFFER_FLAGS_CODEC_DATA。