Автор: Пользователь скрыл имя, 20 Ноября 2014 в 22:02, курсовая работа
Цель разработки: создание информационной мультимедиа системы (медиа-плеера) для презентации аудио-видео информации о факультете КТАС, представленной в специально отснятых и смонтированных .avi файлах.
Результатом разработки является программная реализация специализированного видео проигрывателя и оформление его в виде прикладного приложения в среде Visual C++ 2003 .NET, а также построение специализированного модуля для воспроизведения и управления воспроизведением .avi файлов.
Введение.............................................................................................2
1. Эскизный проект.............................................................................3
1.1 Концептуальная модель системы………………………………….3
1.2 Методика реализации визуализации ИМС …............................4
1.3 Методика реализации пользовательского интерфейса .............4
2. Технологический проект.................................................................5
2.1 Технология разработки модулей программы ……….................5
2.2 Разработка модулей ………………………………........................5
2.2.1. Разработка модуля воспроизведения …………….............5
2.2.2. Разработка модуля пользовательского интерфейса..........9
3. Руководство программиста.............................................................11
3.1 Назначение и условия применения программы..........................11
3.2 Входные и выходные данные.....................................................11
Заключение.........................................................................................12
Для продолжения воспроизведения нужно вызвать функцию Run() интерфейса IMediaControl.
В процессе разработки модуля воспроизведения был создан класс Player. Прототипы его функций можно представить так:
//
// Function prototypes
//
//Инициализация окна плеера
HRESULT InitPlayerWindow(void);
//Инициализация окна воспроизведения
HRESULT InitVideoWindow(int nMultiplier, int nDivider);
//Переключение между полноэкранным и оконным режимами
HRESULT ToggleFullScreen(void);
//Обработка графических событий
HRESULT HandleGraphEvent(void);
//Переключение между тишиной и нормальным по громкости воспроизведением
HRESULT ToggleMute(void);
//Закраска окна в режиме “только звук”
void PaintAudioWindow(void);
//Проверка на наличие видео данных в файле
void CheckVisibility(void);
//Освобождение интерфейсами аппаратных ресурсов
void CloseInterfaces(void);
//Открытие файла
void OpenClip(int);
//Пауза
void PauseClip(void);
//Остановка
void StopClip(void);
//Закрытие клипа
void CloseClip(void);
Прототипы его констант и переменных можно представить так:
//
// Constants
//
//объём звука при нормальном воспроизведении
#define VOLUME_FULL 0L
//объём звука при заглушенном воспроизведени
#define VOLUME_SILENCE -10000L
// начальный путь для поиска мультимедиа файлов
#define DEFAULT_MEDIA_PATH TEXT("\\\0")
// Константы отвечающие за геом. Размеры окна в пикселях
#define DEFAULT_AUDIO_WIDTH 240 // Ширина по //умолчанию в режиме «только звук»
#define DEFAULT_AUDIO_HEIGHT 120 // Высота по //умолчанию в режиме «только звук»
#define DEFAULT_VIDEO_WIDTH 320 // Ширина по //умолчанию
#define DEFAULT_VIDEO_HEIGHT 240 // Высота по //умолчанию
#define MINIMUM_VIDEO_WIDTH 200 // мин ширина
#define MINIMUM_VIDEO_HEIGHT 120 // макс ширина
// перечисляемый тип состояния плеера
enum PLAYSTATE {Stopped, Paused, Running, Init};
//
//Макро определения
//
#define SAFE_RELEASE(x) { if (x) x->Release(); x = NULL; }
#define JIF(x) if (FAILED(hr=(x))) \
{Msg(TEXT("FAILED(hr=0x%x) in ") TEXT(#x) TEXT("\n\0"), hr); return hr;}
#define LIF(x) if (FAILED(hr=(x))) \
{Msg(TEXT("FAILED(hr=0x%x) in ") TEXT(#x) TEXT("\n\0"), hr);}
//Внешние переменные
extern PLAYSTATE g_psCurrent;
extern HWND ghApp;
extern HINSTANCE ghInst;
extern BOOL g_bFullscreen;
Разработанный класс имеет все основные возможности для комфортного воспроизведения и управления воспроизведением файла.
2.2.2 Разработка модуля пользовательского интерфейса
Модуль пользовательского интерфейса программы является важной частью программы, так как от результатов разработки этого модуля зависит «внешний вид» ИМС, ее доступность и функциональность. При разработке интерфейса были использованы следующие возможности библиотеки GDI+: Создание окон произвольной формы. Для создания окон произвольной формы использовались регионы. Создание кнопок произвольной формы. Для их создания аналогичным образом использовались регионы. Алгоритм использования региона для создания окна произвольной формы:
1) Создание бинарного файла типа RGN содержащего информацию о регионе с помощью специализированного ПО (пр.Photoshop CS2 );
а) в процедуре инициализации окна необходимо получить контекст графического устройства с помощью процедуры GetDC();
б) создать совместимый с ним контекст в памяти (для хранения фонового рисунка) с помощью функции CreateCompatibleDC;
в) поместить в этот контекст фоновый рисунок с помощью функции SelectObject;
г) в процедуре Paint отображаем фоновый рисунок с использованием контекста, полученного в п. 2), с использованием функции BitBlt();
Для прорисовки кнопок округлой формы использован несколько другой подход. Алгоритм создания:
Теперь полученный регион назначаем кнопке с помощью функции SetWindowRgn;
3 РУКОВОДСТВО ПРОГРАММИСТА
3.1 Назначение и условия применения программы
Программа предназначена для воспроизведения видео файлов в формате .avi. Для того, чтобы осуществить воспроизведение нужно:
После запуска проигрывателя, он переходит в режим ожидания действий пользователя. Одни из возможных действий пользователя в данной ситуации:
Запуск программы осуществляется двойным щелчком на исполняемом файле программ.
Управление воспроизведением можно осуществить нажатиями следующих клавиш:
R- воспроизведение/остановка
P - Пауза
M – заглушка/включение звука
F – Переключение между оконным и полноэкранным режимами.
Реестр файлов представлен на прилагаемом компакт диске в директории последней версии пояснительной записке в файле реестр файлов.doc.
3.2 Входные и выходные данные
Входными данными программы являются файлы в формате .avi , сжатые с помощью любого установленного в системе кодека, и параметры, введенные пользователем. Такими параметрами можно назвать логическую переменную, отвечающую за состояние проигрывателя в полноэкранном режиме, положение окна проигрывателя в оконном режиме.
Выходным данным является динамическое изображение, составленное из декодированных кадров .avi файла.
Заключение
В данном курсовом проекте были исследованы и реализованы возможности DirectShow по выводу декодированного из видео файла в формате .avi изображения и звука.
Разработан модуль PlayWnd, содержащий класс Player, и соответственно все необходимые процедуры для осуществления воспроизведения и контроля над воспроизведением:
PlayMovieInWindow() – Проигрывание видео
ToggleFullScreen() – Переключение полноэкранного режима
ToggleMute() – Переключение звука
PaintAudioWindow() – Прорисовка окна, если проигрываем только звук
OpenClip() – Открытие файла
PauseClip() – Пауза
StopClip() – Остановка
Использованы возможности Windows GDI по созданию привлекательного пользовательского интерфейса.
К достоинствам разработанного программного продукта можно отнести следующее:
Среди недостатков приложения можно назвать:
Список использованных источников
1. Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес
Приемы объектно-ориентированного проектирования. – М.:BHV, 2003. – 356 c.
2. Документация по DirectX SDK 2004. – Корпорация Microsoft®, 2004.
3. С. Г. Горнаков
DirectX 9.0 Уроки программирования на С++ - БХВ - Петербург, 2004. – 273 с.
4. http://go.divx.com/divx/
Приложение 1
Листинг модуля воспроизведения playwnd.h на языке С++
namespace Player
{
//
// Function prototypes
//
//Инициализация окна плеера
HRESULT InitPlayerWindow(void);
//Инициализация окна воспроизведения
HRESULT InitVideoWindow(int nMultiplier, int nDivider);
//Переключение между полноэкранным и оконным режимами
HRESULT ToggleFullScreen(void);
//Обработка графических событий
HRESULT HandleGraphEvent(void);
//Переключение между тишиной и нормальным по громкости воспроизведением
HRESULT ToggleMute(void);
//Закраска окна в режиме “только звук”
void PaintAudioWindow(void);
//Проверка на наличие видео данных в файле
void CheckVisibility(void);
//Освобождение
интерфейсами аппаратных
void CloseInterfaces(void);
//Открытие файла
void OpenClip(int);
//Пауза
void PauseClip(void);
//Остановка
void StopClip(void);
//Закрытие клипа
void CloseClip(void);
void Msg(TCHAR *szFormat, ...);
//
// Constants
//
#define VOLUME_FULL 0L
#define VOLUME_SILENCE -10000L
// Begin default media search at root directory
#define DEFAULT_MEDIA_PATH TEXT("\\\0")
// Defaults used with audio-only files
#define DEFAULT_AUDIO_WIDTH 240
#define DEFAULT_AUDIO_HEIGHT 120
#define DEFAULT_VIDEO_WIDTH 320
#define DEFAULT_VIDEO_HEIGHT 240
#define MINIMUM_VIDEO_WIDTH 200
#define MINIMUM_VIDEO_HEIGHT 120
#define WM_GRAPHNOTIFY WM_USER+13
enum PLAYSTATE {Stopped, Paused, Running, Init};
//
// Macros
//
#define SAFE_RELEASE(x) { if (x) x->Release(); x = NULL; }
#define JIF(x) if (FAILED(hr=(x))) \
{Msg(TEXT("FAILED(hr=0x%x) in ") TEXT(#x) TEXT("\n\0"), hr); return hr;}
#define LIF(x) if (FAILED(hr=(x))) \
{Msg(TEXT("FAILED(hr=0x%x) in ") TEXT(#x) TEXT("\n\0"), hr);}
extern PLAYSTATE g_psCurrent;
extern HWND ghApp;
extern HINSTANCE ghInst;
extern BOOL g_bFullscreen;
}
Приложение 2
Листинг модуля воспроизведения playwnd.cpp на языке С++
#include <dshow.h>
#include <commctrl.h>
#include <commdlg.h>
#include <stdio.h>
#include <tchar.h>
#include <atlcore.h>
#include <objbase.h>
#include "playwnd.h"
namespace Player
{
//
// Global data
//
HWND ghApp=0;
HINSTANCE ghInst=0;
TCHAR g_szFileName[MAX_PATH]={0};
BOOL g_bAudioOnly=FALSE, g_bFullscreen=FALSE;
LONG g_lVolume=VOLUME_FULL;
DWORD g_dwGraphRegister=0;
PLAYSTATE g_psCurrent=Stopped;
double g_PlaybackRate=1.0;
// DirectShow interfaces
IGraphBuilder *pGB = NULL;
IMediaControl *pMC = NULL;
IMediaEventEx *pME = NULL;
IVideoWindow *pVW = NULL;
IBasicAudio *pBA = NULL;
IBasicVideo *pBV = NULL;
IMediaSeeking *pMS = NULL;
IMediaPosition *pMP = NULL;
const int AUDIO=1, VIDEO=2; // Used for enabling playback menu items
//Я
HRESULT PlayMovieInWindow(LPTSTR szFile)
{
USES_CONVERSION;
WCHAR wFile[MAX_PATH];
HRESULT hr;
if (!szFile)
return E_POINTER;
// Clear open dialog remnants before calling RenderFile()
UpdateWindow(ghApp);
// Convert filename to wide character string
wcsncpy(wFile, T2W(szFile), NUMELMS(wFile)-1);
wFile[MAX_PATH-1] = 0;
// Get the interface for DirectShow's GraphBuilder
JIF(CoCreateInstance(CLSID_
IID_IGraphBuilder, (void **)&pGB));
if(SUCCEEDED(hr))
{
// Have the graph builder construct its the appropriate graph automatically
JIF(pGB->RenderFile(wFile, NULL));
// QueryInterface for DirectShow interfaces
JIF(pGB->QueryInterface(IID_
JIF(pGB->QueryInterface(IID_
JIF(pGB->QueryInterface(IID_
JIF(pGB->QueryInterface(IID_
//// Query for video interfaces, which may not be relevant for audio files
JIF(pGB->QueryInterface(IID_
JIF(pGB->QueryInterface(IID_
//// Query for audio interfaces, which may not be relevant for video-only files
JIF(pGB->QueryInterface(IID_
Информация о работе Разработка тренажёров и обучающих программ