gpt4 book ai didi

c++ - 使用 ffmpeg 解码原始 H264 帧时出错

转载 作者:太空宇宙 更新时间:2023-11-03 17:25:49 25 4
gpt4 key购买 nike

我真的很感激在这个问题上的一些帮助。我是 FFmpeg 的新手,如果这是一个愚蠢的问题,请原谅我

我有一个应用程序通过 UDP 从摄像机流式传输 H264 原始数据。这种沟通工作正常。问题是在尝试解码时

我只是想解码我收到的数据,以便将一些计算机视觉技术应用于另一个项目。

调用后立即出现错误-22

avcodec_send_packet

你们中有人知道它会是什么吗?这是我的部分代码

Mat DecodificadorH264::h264decode(char* rawH264, int size){
...
...
AVPacket av_packet;
av_init_packet(&av_packet);
uint8_t data;
data = *rawH264;
av_packet.data = &data;
av_packet.size = size;

cout << "size = "<<av_packet.size;

int frame_finished = 0;

l_pCodec = avcodec_find_decoder(AV_CODEC_ID_H264);

l_pAVCodecContext = avcodec_alloc_context3(l_pCodec);

l_pAVCodecContext->width = FRAME_WIDTH;
l_pAVCodecContext->height = FRAME_HEIGHT;
l_pAVCodecContext->extradata = NULL;

l_pAVCodecContext->pix_fmt = AV_PIX_FMT_YUV420P;

int av_return = avcodec_send_packet(l_pAVCodecContext,
(AVPacket*)&av_packet);
if (av_return == AVERROR(EINVAL))cout << "codec not opened, or it is an encoder" << endl;
....

av_return 返回“AVERROR(EINVAL)”,定义为-22

可能是什么问题?

提前致谢!

最佳答案

到目前为止我看到一个问题:

uint8_t data;
data = *rawH264;
av_packet.data = &data; // all you did here is copy the first char from rawH264 into data

你需要的是

av_packet.data = rawH264; // you might have to cast rawH264 to uint8_t* first

根据 https://ffmpeg.org/doxygen/0.6/error_8h.html : #define AVERROR_INVALIDDATA AVERROR(EINVAL) 处理输入时发现无效数据。

所以结果是 EINVAL 是有道理的,因为您传入了堆栈上的 &data,并且使用大小参数,它正在读取堆栈,就好像它是实际编码的视频数据一样。

关于c++ - 使用 ffmpeg 解码原始 H264 帧时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43218009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com