小弟在用 ffmpeg 做一个直播流的播放器,发现当直播流中 265 切成 264 ,播放器会卡死,查了下是 ffmpeg 的 265 封装器没法直接解析 264 的封装头部,于是找到解析报错的地方是在 ff_h2645_packet_split 里的 hevc_parse_nal_header 。 本以为把这个 ret 为负的报错抛上去就能解决了。 结果改完后,发现个别手机的正常 265 直播流也会 ret<0 ,这下不知道该怎么区分是编码格式切换引起还是个简单的 warning 了。 有大神能给点思路吗?
int ff_h2645_packet_split(H2645Packet *pkt, const uint8_t *buf, int length, void *logctx, int is_nalff, int nal_length_size, enum AVCodecID codec_id)
{
......
if (codec_id == AV_CODEC_ID_HEVC)
ret = hevc_parse_nal_header(nal, logctx);
else
ret = h264_parse_nal_header(nal, logctx);
if (ret <= 0 || nal->size <= 0) {
if (ret < 0) {
av_log(logctx, AV_LOG_ERROR, "Invalid NAL unit %d, skipping.\n",
nal->type);
}
pkt->nb_nals--;
}
......
}