В моем приложении на c # я пишу код для преобразования любого видео формата в формат flv. Для этого используется FFMPEG.
Иногда возникает исключение, например:
Попытка чтения или записи в защищенную память. Это часто указывает на то, что другая память повреждена
Ниже мой код, откуда выдается исключение,
IntPtr pFormatContext;
FFmpeg.av_register_all();
int ret;
ret = FFmpeg.av_open_input_file(out pFormatContext, this.Filename, IntPtr.Zero, 0, IntPtr.Zero);
if (ret < 0)
{
Trace.WriteLine("couldn't open input file");
FFmpeg.av_free_static();
return;
}
try
{
ret = FFmpeg.av_find_stream_info(pFormatContext);
if (ret < 0)
{
Trace.WriteLine("couldnt find stream informaion");
FFmpeg.av_close_input_file(pFormatContext);
FFmpeg.av_free_static();
return;
}
FFmpeg.AVFormatContext formatContext = (FFmpeg.AVFormatContext)Marshal.PtrToStructure(pFormatContext, typeof(FFmpeg.AVFormatContext));
Duration = formatContext.duration / FFmpeg.AV_TIME_BASE;
for (int i = 0; i < formatContext.nb_streams; ++i)
{
FFmpeg.AVStream stream = (FFmpeg.AVStream)Marshal.PtrToStructure(formatContext.streams[i], typeof(FFmpeg.AVStream));
FFmpeg.AVCodecContext codec = (FFmpeg.AVCodecContext)Marshal.PtrToStructure(stream.codec, typeof(FFmpeg.AVCodecContext));
if (codec.codec_type == FFmpeg.CodecType.CODEC_TYPE_VIDEO)
{
Height = codec.height;
Width = codec.width;
Type = FileType.flv;
MimeType = "video/x-flv";
}
}
}
catch (Exception ex)
{
Trace.WriteLine("FFMpeg failed to understand the file");
}
FFmpeg.av_close_input_file(pFormatContext);
FFmpeg.av_free_static();
}
И из приведенного выше кода эта строка ret = FFmpeg.av_find_stream_info(pFormatContext);
выдает исключение повреждения памяти.
Пожалуйста, помогите мне решить эту проблему.