Two slices reporting being the first in the same frame. 和 Could not find ref with POCXX问题

[hevc @ 000001716438fc00] Two slices reporting being the first in the same frame.
[hevc @ 000001716439ec80] Could not find ref with POC 2

在这里插入图片描述
现象: 解码H264流的时候一切正常,解码H265流出现以上错误,并且经常花屏

网上查到的办法是:
(1)修改ffmpeg的udp的接收缓冲区大小,设置为1024000
(2)改变ffmpeg解码器上下文的thread_count = 4
(3)一个线程收包,一个线程解包。
当然这些办法都不能解决问题。

后来发现是给ffmpeg喂数据的方式不合适。
我给ffmpeg喂数据的方式简单粗暴
具体方式如下:
假设ptr为一帧完整H265,ptr_szie是ptr的大小

pkt->data = ptr;
pkt->size = ptr_szie;
avcodec_send_packet(m_pDecodeCtx,pkt);
avcodec_receive_frame(m_pDecodeCtx, frame);

解决办法:使用avio_alloc_context的回调函数read_packet来给ffmpeg喂数据。
经过测试,不会出现Could not find ref with POCXX的问题
经测试,延时160ms

AVIOContext *avio_alloc_context(
                  unsigned char *buffer,
                  int buffer_size,
                  int write_flag,
                  void *opaque,
                  int (*read_packet)(void *opaque, uint8_t *buf, int buf_size),
                  int (*write_packet)(void *opaque, uint8_t *buf, int buf_size),
                  int64_t (*seek)(void *opaque, int64_t offset, int whence));

或者使用硬件编码也可以解决问题

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值