сів DirectShow і середовища розробки додатків Microsoft Visual Studio .NET 2003.
Архітектура DirectShow побудована таким чином, щоб програмісту було легко працювати з ним. Завантаження та відтворення файлів вимагає невеликого числа процедур і проста у виконанні.
Перелік інтерфейсів, використаних в роботі:
IGraphBuilder ;;;;;;;;
Всі інтерфейси успадковані від інтерфейсу IUnknown, який має всього три функції:
AddRef - додавання посилання на об'єкт інтерфейса- отримання батьківських або спадкових інтерфейсів обраного об'єкта-видалення з пам'яті інтерфейсу і повернення витрачених апаратних засобів
Детальніше зупинимося на інтерфейсах DirectShow.- інтерфейс, що здійснює побудову картинки за допомогою певних DirectShow фільтров.- інтерфейс, який здійснює контроль над відтворенням файлу (виходить на основі інтерфейсу IGraphBuilder) - більш розширений інтерфейс для контролю над здійсненням мультимедіа подій при відтворенні файлу (виходить на основі інтерфейсу IGraphBuilder) - інтерфейс, що здійснює управління вікном для виведення графічної інформації (виходить на основі інтерфейсу IgraphBuilder), IBasicVideo - інтерфейси для доступу до базових відео і аудіо функціям, IMediaPosition - інтерфейси для переміщення по воспроизводимому файлу для пошуку потрібних фрагментів і контролю за поточним часом відтворення.
Алгоритм відтворення відео файлу:
Створення інтерфейсу IGraphBuilder за допомогою функції CoCreateInstance ()
Визначаємо ім'я відтвореного файлу
Виклик функції IGraphBuilder :: RenderFile для установки зв'язку між файлом на жорсткому диску і інтерфейсом IGraphBuilder
Отримання інтерфейсів IMediaControl, IMediaEventEx, IMediaSeeking, IMediaPosition, IvideoWindow, IBasicAudio, IBasicVideo за допомогою функції QueryInterface.
Перевірка, чи є файл тільки аудіо файлом
Якщо ні, то визначаємо стиль вікна виводу за допомогою функцій put_Owner і put_WindowStyle і далі ініціалізіруем вікно виводу за допомогою функції InitVideoWindow в якій можна змінювати масштаб зображення, що виводиться
Якщо так то ініціалізіруем вікно плеєра.
Показуємо вікно програми
Оновлюємо вікно додатка для боротьби з артефактами
Встановлюємо нормальну швидкість відтворення 1.0
Викликаємо функцію Run інтерфейсу IMediaControl
Алгоритм зупинки відтворення відео файлу
Якщо стан програвача «Відтворення» або «Пауза» то
Викликаємо функцію SetPositions інтерфейсу IMediaSeeking
Викликаємо функцію Pause () інтерфейсу IMediaControl
Для паузи відтворення потрібно викликати функцію Pause () інтерфейсу IMediaControl.
Для продовження відтворення потрібно викликати функцію Run () інтерфейсу IMediaControl.
У процесі розробки модуля відтворення був створений клас Player. Прототипи його функцій можна представити так:
//
//Function prototypes
//
//Ініціалізація вікна плеераInitPlayerWindow (void);
//Ініціалізація вікна відтворення
HRESULT InitVideoWindow (int nMultiplier, int nDivider);
//Перемикання між повноекранним і віконним режімаміToggleFullScreen (void);
//Обробка графічних собитійHandleGraphEvent (void);
//Перемикання між тишею і нормальним по гучності воспроізведеніемToggleMute (void);
//Зафарбування вікна в режимі тільки звук PaintAudioWindow (void);
//Перевірка на наявність відео даних в файлеCheckVisibility (void);
//Звільнення інтерфейсами апаратних ресурсів
void CloseInterfaces (void);
//Відкриття файлаOpenClip (int);
//ПаузаPauseClip (void);
//ОстановкаStopClip (void);
//Закриття кліпаCloseClip (void);
Прототипи його констант і змінних можна представити так:
//
//Constants
//
//обсяг звуку при нормальному відтворенні
# define VOLUME_FULL 0L
//обсяг звуку при заглушеному відтворенням
# define VOLUME_SILENCE - 10000L
//початковий шлях для пошуку мультимедіа файлів