Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Параметры фильмов


Автор: Ch0bits 12.4.2005, 15:34
Например открываю я свойства какой-нибудь mpeg'ки или avi'ки и могу посмотреть там битрейт звука, видео, размер видео, кодек, частота кадров, длительнось...
Можно ли получить подобную информацию средствами дотНЕТа, ведь explorer получает?

Автор: Ch0bits 13.4.2005, 09:57
Чего-то не видно ответов... smile видать архисложная фиговина.

Автор: mr.DUDA 13.4.2005, 10:58
Цитата(Vadim999 @ 12.4.2005, 15:34)
Можно ли получить подобную информацию средствами дотНЕТа, ведь explorer получает

Не вижу логической связи... При чём тут explorer к .NET?

P.S. Это то же самое что говорить о JAVA, сравнивая возможности её библиотеки базовых классов с возможностями софта под FreeBSD.

P.S. (2) наверное, есть какой-то способ (типа прикрутить COM-компонент или бесплатную unmanaged библиотеку), не знаю smile .

Автор: Ch0bits 13.4.2005, 11:37
Цитата(mr @ 13.4.2005, 10:58)
При чём тут explorer к .NET?

Explorer получает эту инфу средствами виндовс, а .NET как бы и является воплощением всех возможностей виндовс(заменяет прогр. на API).
Поскольку "свойства файла" встроены в виндузу, то где то есть DLLка с функцией которая получает эту инфу.

Автор: mr.DUDA 13.4.2005, 11:47
Цитата(Vadim999 @ 13.4.2005, 11:37)
а .NET как бы и является воплощением всех возможностей виндовс(заменяет прогр. на API).

Где это написано ?

Автор: Ch0bits 13.4.2005, 12:03
Цитата(mr @ 13.4.2005, 11:47)
Где это написано ?

Это пропагандируется M$. И является заменой всему по умолчанию.

Автор: mr.DUDA 13.4.2005, 12:43
По идее, можно получить информацию о файле с помощью MCI. Не вникая в детали, получится примерно такой код:
Код
public class AviInfo
    {
        [DllImport("winmm.dll")]
        extern static int mciSendString(string command, IntPtr responseBuffer,int bufferLength, int nothing);

        [STAThread]
        unsafe static void Main(string[] args)
        {
            IntPtr response = Marshal.AllocHGlobal(128);
            int lastErr;
            try
            {
                cmd = "open c:\\video\\Film.avi";
                lastErr = mciSendString(cmd, response, 128, 0);
                if(lastErr != 0) return;

                cmd = "info digitalvideo video algorithm";
                lastErr = mciSendString(cmd, response, 128, 0);

                byte *cbuf = (byte *) response;
                string str = String.Empty;
                for(int i=0; i<128; i++)
                    if(cbuf[i] != 0)
                        str += (char) cbuf[i];

                cmd = "close digitalvideo";
                lastErr = mciSendString(cmd, response, 128, 0);
            }
            finally
            {
                Marshal.FreeHGlobal(response);
            }
        }


Код не работает (MCI возвращает какую-то ошибку при попытке получить инфу), но я думаю в разделе по мультимедиа помогут составить правильную последовательность MCI-команд.

Автор: Ch0bits 14.4.2005, 23:02
Даже скомпилить не могу... smile
Ошибка: Unsafe code may only appear if compiling with /unsafe


Код

using System;
using System.Runtime.InteropServices;

public class AviInfo
{
    [DllImport("winmm.dll")]
    extern static int mciSendString(string command, IntPtr responseBuffer,int bufferLength, int nothing);

    unsafe static void Main(string[] args)
    {
        IntPtr response = Marshal.AllocHGlobal(128);
        int lastErr;
        try
        {
            string cmd = "open c:\\video\\Film.avi";
            lastErr = mciSendString(cmd, response, 128, 0);
            if(lastErr != 0) return;
            cmd = "info digitalvideo video algorithm";
            lastErr = mciSendString(cmd, response, 128, 0);
            byte *cbuf = (byte *) response;
            string str = String.Empty;
            for(int i=0; i<128; i++)
                if(cbuf[i] != 0)
                    str += (char) cbuf[i];
            cmd = "close digitalvideo";
            lastErr = mciSendString(cmd, response, 128, 0);
        }
        finally
        {
            Marshal.FreeHGlobal(response);
        }
    }
}

Автор: SergKO 15.4.2005, 05:39
Цитата(Vadim999 @ 14.4.2005, 23:02)
Даже скомпилить не могу... 
Ошибка: Unsafe code may only appear if compiling with /unsafe


В свойствах проекта необходимо установить соответствующее разрешение AllowUnsafeBlocks

Автор: Ch0bits 15.4.2005, 10:53
Я уже додумался, просто указал опцию компилятора csc /unsafe.

Но прога всё равно вылетает(путь к фильму правильный), ошибка: smile
Инструкция по адресу "0x078a7bb6" обратилась к памяти по адресу "0x07a84db4" Память не может быть "read". smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)