使用 FFmpeg.AutoGen 读取摄像头,将图片显示在控件上,并保存图像到文件中,一开始读取正常,声音、图像都能保存,但是读取几分钟后,程序在使用 av_read_frame 时,会读取不到数据,错误码 -5,摄像头也自动关闭了。直接使用 ffmpeg.exe 去读取摄像头,保存文件的时候,几个小时都不会有问题。读取的逻辑使用就是雷神的。请问这种返回 -5 错误码的情况是怎么出现的,应该怎么处理?
while (1)
{
if ((ret = ffmpeg.av_read_frame(m_pVidFmtCtx, dec_pkt)) == 0)
{
ret = ffmpeg.avcodec_send_packet(m_pVidFmtCtx->streams[dec_pkt->stream_index]->codec, dec_pkt);
while(ret >= 0)
{
ret = ffmpeg.avcodec_receive_frame(m_pVidFmtCtx->streams[dec_pkt->stream_index]->codec, pframe);
ffmpeg.sws_scale(img_rgb_ctx, pframe->data, pframe->linesize, 0, cy, dstData, dstLinesize);
var bitmap = new Bitmap(dstWidth, dstHeight, dstLinesize[0], PixelFormat.Format24bppRgb, convertedFrameBufferPtr);
}
}
}
FFmpeg
会不会连接超时了
是本地的USB摄像头,应该不会有超时吧
我头疼的就是为啥我自己写的它会不定时的录几分钟就停掉,用ffmpeg打包好的ffmpeg.exe就不会出现这个问题,源码太难懂了,也没发现ffmpeg.exe里做啥特殊处理了
不知道你机器性能,帧率能跟得上吗?要不试试把 av_read_frame和解码转码保存分开。现在这样的话,读了一个packet要等“解码+转码+保存+显示”完毕之后才能读下一个packet。
引用来自“天体图”的评论
不知道你机器性能,帧率能跟得上吗?要不试试把 av_read_frame和解码转码保存分开。现在这样的话,读了一个packet要等“解码+转码+保存+显示”完毕之后才能读下一个packet。
好的,你这个思路不错,我可以来修改下