Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: !!!!DirectShow!!!! Добавлено: 29.08.06 12:03  

Автор вопроса:  Dark Engine | Web-сайт: www.wentas.2bb.ru | ICQ: 343191665 
Товарищи! Помогите, плз! Нужен пример работы с Direct Show, желательно с возможностью регулировать размер выводимого видео и с рабочим звуком. Сразу скажу, MSDN у меня нет по причине (мягко говоря) раритетности этих дисков в моем городе. Если там такой пример (или хотя бы объяснение, как это сделать) есть - просьба (если не трудно) выложить его здесь или послеть мне на мыло: retributor@yandex.ru

Ответить

  Ответы Всего ответов: 5  

Номер ответа: 1
Автор ответа:
 JMP



Вопросов: 6
Ответов: 171
 Профиль | | #1 Добавлено: 29.08.06 17:23
Если там такой пример (или хотя бы объяснение, как это сделать) есть - просьба (если не трудно) выложить его здесь


Примеров в PSDK (~607 метров) для DirectShow
очень много, просто набрал DirectShow и получил результат ~ 500 топиков, ИМХО надо искать у кого есть хороший и-нет канал, заплатить за растраты и скачать
полный комплект. Или просто сидеть на MSDN и искать
что надо.

Удачи,



Microsoft DirectShow 9.0
How To Play a File
This article is intended to give you the flavor of DirectShow programming. It presents a simple console application that plays an audio or video file. The program is only a few lines long, but it demonstrates some of the power of DirectShow programming.

As the article Introduction to DirectShow Application Programming describes, a DirectShow application always performs the same basic steps:

Create an instance of the Filter Graph Manager.
Use the Filter Graph Manager to build a filter graph.
Run the graph, causing data to move through the filters.
Start by calling CoInitialize to initialize the COM library:

HRESULT hr = CoInitialize(NULL);
if (FAILED(hr))
{
    // Add error-handling code here. (Omitted for clarity.)
}

To keep things simple, this example ignores the return value, but you should always check the HRESULT value from any method call.

Next, call CoCreateInstance to create the Filter Graph Manager:

IGraphBuilder *pGraph;
HRESULT hr = CoCreateInstance(CLSID_FilterGraph, NULL,
    CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pGraph);

As shown, the class identifier (CLSID) is CLSID_FilterGraph. The Filter Graph Manager is provided by an in-process DLL, so the execution context is CLSCTX_INPROC_SERVER. DirectShow supports the free-threading model, so you can also call CoInitializeEx with the COINIT_MULTITHREADED flag.

The call to CoCreateInstance returns the IGraphBuilder interface, which mostly contains methods for building the filter graph. Two other interfaces are needed for this example:

IMediaControl controls streaming. It contains methods for stopping and starting the graph.
IMediaEvent has methods for getting events from the Filter Graph Manager. In this example, the interface is used to wait for playback to complete.
Both of these interfaces are exposed by the Filter Graph Manager. Use the returned IGraphBuilder pointer to query for them:

IMediaControl *pControl;
IMediaEvent   *pEvent;
hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
hr = pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);

Now you can build the filter graph. For file playback, this is done by a single method call:

hr = pGraph->RenderFile(L"C:\\Example.avi", NULL);

The IGraphBuilder::RenderFile method builds a filter graph that can play the specified file. The first parameter is the file name, represented as a wide character (2-byte) string. The second parameter is reserved and must equal NULL.

This method can fail if the specified file does not exist, or the file format is not recognized. Assuming that the method succeeds, however, the filter graph is now ready for playback. To run the graph, call the IMediaControl::Run method:

hr = pControl->Run();

When the filter graph runs, data moves through the filters and is rendered as video and audio. Playback occurs on a separate thread. You can wait for playback to complete by calling the IMediaEvent::WaitForCompletion method:

long evCode = 0;
pEvent->WaitForCompletion(INFINITE, &evCode);

This method blocks until the file is done playing, or until the specified time-out interval elapses. The value INFINITE means the application blocks indefinitely until the file is done playing. For a more realistic example of event handling, see Responding to Events.

When the application is finished, release the interface pointers and close the COM library:

pControl->Release();
pEvent->Release();
pGraph->Release();
CoUninitialize();

Sample Code

Here is the complete code for the example described in this article:

#include <dshow.h>
void main(void)
{
    IGraphBuilder *pGraph = NULL;
    IMediaControl *pControl = NULL;
    IMediaEvent   *pEvent = NULL;

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

    // Create the filter graph manager and query for interfaces.
    hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
                        IID_IGraphBuilder, (void **)&pGraph);
    if (FAILED(hr))
    {
        printf("ERROR - Could not create the Filter Graph Manager.";);
        return;
    }

    hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
    hr = pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);

    // Build the graph. IMPORTANT: Change this string to a file on your system.
    hr = pGraph->RenderFile(L"C:\\Example.avi", NULL);
    if (SUCCEEDED(hr))
    {
        // Run the graph.
        hr = pControl->Run();
        if (SUCCEEDED(hr))
        {
            // Wait for completion.
            long evCode;
            pEvent->WaitForCompletion(INFINITE, &evCode);

            // Note: Do not use INFINITE in a real application, because it
            // can block indefinitely.
        }
    }
    pControl->Release();
    pEvent->Release();
    pGraph->Release();
    CoUninitialize();
}


Ответить

Номер ответа: 2
Автор ответа:
 Dark Engine



ICQ: 343191665 

Вопросов: 51
Ответов: 98
 Web-сайт: www.wentas.2bb.ru
 Профиль | | #2
Добавлено: 30.08.06 12:40
А для VB есть пример?

Ответить

Номер ответа: 3
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #3 Добавлено: 31.08.06 15:51
JMP, ето тебе что, www.C++net.ru чтоли? :)

Ответить

Номер ответа: 4
Автор ответа:
 Sur



ICQ: 1249088 

Вопросов: 10
Ответов: 304
 Web-сайт: sur.hotbox.ru/
 Профиль | | #4
Добавлено: 01.09.06 19:38
Ну навалом примеров. Как вариант:
http://www.Planet-Source-Code.com/vb/scripts/ShowCode.asp?txtCodeId=48129&lngWId=1

А так, подключить quartz.dll в референсах и смотреть по F2 что можно оттуда пользовать. Если не нужно захватывать кадры, то этого достаточно.

Ответить

Номер ответа: 5
Автор ответа:
 Dark Engine



ICQ: 343191665 

Вопросов: 51
Ответов: 98
 Web-сайт: www.wentas.2bb.ru
 Профиль | | #5
Добавлено: 08.09.06 11:10
Спасибо! Кстати, именно от того, что не знал, какую библиотеку подключать надо, я и спрашивал. Пример мне прислали, все работает. Спасибо.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам