Преобразование видео в FLV с помощью ffmpeg - PullRequest
1 голос
/ 06 января 2012

В моем приложении на 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); выдает исключение повреждения памяти. Пожалуйста, помогите мне решить эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...