ffmpeg从内存读取数据进行解码碰到的问题
ffmpeger 发布于 2022-08-28

之前对mp4文件进行解码,后来想到了从网络流接收数据之后暂存在内存中,从内存读取直接进行解码,原本以为没什么区别,但是真正测试发现了很多问题,如下面的代码

 

AVIOContext* pb = NULL;
	const AVInputFormat* piFmt = NULL;
	uint8_t* buf = (uint8_t*)av_mallocz(sizeof(uint8_t)* BUF_SIZE);
	pb = avio_alloc_context(buf, BUF_SIZE, 0, NULL, read_data, NULL, NULL);
	fmt_ctx = avformat_alloc_context();
	fmt_ctx->pb = pb;
	ret = avformat_open_input(&fmt_ctx, "", piFmt, NULL);

备注:int read_data(void *opaque, uint8_t *buf, int buf_size)

执行到avformat_open_input函数可能会一直卡住过不了,调试的时候是可以过去,但是不断点反而过不了,一直卡在read_data函数中,而且打印read_data的参数,发现 buf_size一直在减少,减少的数量为读到buf的数量,后来推迟执行时间,等网络流接收到足够的数据再继续往下执行,又出现了下面几个问题

h264 @ 0000025e8455c280] error while decoding MB 1 24, bytestream -22

[h264 @ 0000025e8455c280] concealing 288 DC, 288 AC, 288 MV errors in I frame

[h264 @ 0000025e8455c280] Invalid NAL unit size (0 > 2120).

[h264 @ 0000025e8455c280] Error splitting the input into NAL units.

ffmpeger
关注 私信
文章
63
关注
0
粉丝
0