Автор Тема: воспроизведение audio/video  (Прочитано 4600 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн #535

  • Действительный статский советник
  • *****
  • Сообщений: 1794
  • Репутация: 38
  • Пол: Мужской
  • Make scene,not war!
воспроизведение audio/video
« : ПЭТРам 09, 2008, 07:51:17 pm »
В поиске не нашел ;)

Вобщем проблема такая: хочу написать плеер.Без использования directshow и т.п. Вот я никак в инете не могу найти как вообще работает возпроизведение mp3,ogg и т.д. Спецификацию формата допустим можно найти, а что с ней потом делать - увы не знаю ;( Как,например работают библиотеки fmod,bass,mpglib, да и тот же directshow??

Надеюсь,кто-нить в курсе...

P.S.
Ведь winamp это как-то делает ;)


Оффлайн #535

  • Действительный статский советник
  • *****
  • Сообщений: 1794
  • Репутация: 38
  • Пол: Мужской
  • Make scene,not war!
Re: воспроизведение audio/video
« Ответ #1 : ПЭТРам 10, 2008, 03:44:12 pm »
Знаю,что сознательно иду на нарушение правил, но up!

P.S.
Неужели никто не знает? ;)
Aks?


Оффлайн Granata005

  • злой бомб
  • Статский советник
  • *****
  • Сообщений: 891
  • Репутация: 31
  • Пол: Мужской
  • Lantorg.com
Re: воспроизведение audio/video
« Ответ #2 : ПЭТРам 10, 2008, 03:52:26 pm »
Поройся тут, может ниточку какую-нибудь найдёшь...

Оффлайн #535

  • Действительный статский советник
  • *****
  • Сообщений: 1794
  • Репутация: 38
  • Пол: Мужской
  • Make scene,not war!
Re: воспроизведение audio/video
« Ответ #3 : ПЭТРам 10, 2008, 10:13:16 pm »
Вопрос все еще в силе.


Оффлайн al-131

  • Коллежский регистратор
  • *
  • Сообщений: 4
  • Репутация: 0
Re: воспроизведение audio/video
« Ответ #4 : °ЯаХЫм 06, 2009, 09:51:17 am »
   Под DirectShow делается это просто:
-----------------------------------------------------------------
Код: (cpp) [Выделить]
// This simple console application shows how
// to create Filter Graph Manager,
// to build Filter Grapf and
// to play media file or video stream from web server camera

#include <dshow.h>
#include <stdio.h>
#include <conio.h>

void MessBoxAndWait( char *pText );

void main( void )
{
    IGraphBuilder *pGraph   = NULL;
    IMediaControl *pControl = NULL;
    IMediaEvent   *pEvent   = NULL;

char       *pMess;
LPCWSTR        sTmp;

    // 1. Initialize the COM library:
    HRESULT hr = CoInitialize( NULL );
    if (FAILED(hr))
    {
pMess = "ERROR - Could not initialize COM library";
MessBoxAndWait( pMess );
        return;
    }

    // 2. Create the Filter Graph Manager:
    hr = CoCreateInstance( CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
                        IID_IGraphBuilder, (void **)&pGraph );
    if( FAILED(hr) )
    {
pMess = "ERROR - Could not create the Filter Graph Manager.";
MessBoxAndWait( pMess );
    CoUninitialize();
        return;
    }

    // 3. Query interface for MediaControl:
    hr = pGraph->QueryInterface( IID_IMediaControl, (void **)&pControl );
    if( FAILED(hr) )
    {
pMess = "ERROR - Could not query Interface for IMediaControl.";
MessBoxAndWait( pMess );
    pGraph->Release();
    CoUninitialize();
        return;
    }

    // 4. Query interface for MediaEvent:
    hr = pGraph->QueryInterface( IID_IMediaEvent, (void **)&pEvent );
    if( FAILED(hr) )
    {
pMess = "ERROR - Could not query Interface for IMediaEvent.";
MessBoxAndWait( pMess );
    pControl->Release();
    pGraph->Release();
    CoUninitialize();
        return;
    }

    // 5. Build the Filter Graph:
sTmp = L"..\\..\\Cam1_2009-03-27_07-46-32.asf";   // ASF media source file
hr = pGraph->RenderFile( sTmp, NULL );
    if( FAILED(hr) )
    {
pMess = "ERROR - Could not Render File.";
MessBoxAndWait( pMess );
    pEvent->Release();
    pControl->Release();
    pGraph->Release();
    CoUninitialize();
        return;
    }

    // 6. Run the graph:
    hr = pControl->Run();
    if( FAILED(hr) )
    {
pMess = "ERROR - Could not Run Graph.";
MessBoxAndWait( pMess );
    pEvent->Release();
    pControl->Release();
    pGraph->Release();
    CoUninitialize();
        return;
    }

    // 7. Wait for completion:
    long evCode;
    pEvent->WaitForCompletion( INFINITE, &evCode );

    // Note: Do not use INFINITE in a real application, because it
    // can block indefinitely.

pMess = "SUCCESS!";
MessBoxAndWait( pMess );

    // 8. Release all objects:
    pControl->Release();
    pEvent->Release();
    pGraph->Release();
    CoUninitialize();
}

// This function display message and wait any key
void MessBoxAndWait( char *pText )
{
printf( pText );
_getch();
}
Пользуемся тегами code!
----------------------------------------------------------------------------
Замечание: Предварительно нужно инсталлировать Windows Platform SDK и настроить окружение в Visual C++ 6.0 или выше (я использовал VS .NET 2005). Настройка состоит в добавлении пути к Include директории Windows SDK (C:\Programm Files\Microsoft SDKs\Windows\V6.1\Include) и добавлении в проект двух библиотек quarzt.lib и strmiids.lib (из того же места). Строку sTmp = L"..\\..\\Cam1_2009-03-27_07-46-32.asf";   // ASF media source file нужно заменить, указав путь к нужному медиа-файлу.
    Если же эту строку заменить на http-запрос, то можно получить видео с камеры (для этого, однако, в системе должен быть соответствующий фильтр для входного потока). Например: sTmp = L"axrtpu://192.168.0.153/mpeg4/media.amp"; // Axis MPEG4 camera

« Последнее редактирование: °ЯаХЫм 06, 2009, 03:28:07 pm от razb »

Оффлайн aks

  • Администратор
  • Тайный советник
  • *****
  • Сообщений: 2836
  • Репутация: 74
  • Пол: Мужской
Re: воспроизведение audio/video
« Ответ #5 : °ЯаХЫм 09, 2009, 08:23:57 am »
Неужели никто не знает? ;)
Aks?
Уже не актуально? =)

Вобщем проблема такая: хочу написать плеер.Без использования directshow и т.п. Вот я никак в инете не могу найти как вообще работает возпроизведение mp3,ogg и т.д. Спецификацию формата допустим можно найти, а что с ней потом делать - увы не знаю ;( Как,например работают библиотеки fmod,bass,mpglib, да и тот же directshow??

Надеюсь,кто-нить в курсе...

P.S.
Ведь winamp это как-то делает ;)
Тоесть ты не знаешь как реализовать алгоритм декодирования? ну как правило это действительно не тривиальная задача. Я бы на самом деле посоветовал посмотреть библиотеку ffmpeg, там есть это все объединенное единым интерфейсом. Огромное количество уже реализованных кодеков с примерами.
winamp кстати через directshow работает. =)
Ну может mp3 кодек у него свой. Вернее lame