Рассматриваются некоторые способы использования видео файлов различных форматов - AVI, GIF анимация, XviD MPEG4, Flash(.swf), Microsoft Windows Media(.wmv) и т.п. в среде Visual Basic.
Рассматриваются некоторые способы использования видео файлов различных форматов - AVI, GIF анимация, XviD MPEG4, Flash(.swf), Microsoft Windows Media(.wmv) и т.п. в среде Visual Basic. В системе проектирования VB есть достаточно средств для работы с различными файлами мультимедиа. Самым простым и вероятно самым первым средством просмотра анимированных картинок, с которым сталкивается программист на VB 6.0 является инструмент Animation, который входит в состав дополнительного набора Microsoft Windows Common Controls-2 6.0. Инструмент Animation умеет прокручивать несжатые avi файлы без звука. Образцы таких файлов лежат в папке ...GraphicsAvis и отличаются при всей своей невзрачности солидными размерами. Так файл Cineapk.avi при длительности воспроизведения чуть больше 1 сек. имеет размер 30,4 Кб! Работать с этими файлами очень просто - помещаем на форму объект Animation, и две кнопки, одна будет "Пуск", а другая "Стоп". Animation растяните до нужных размеров и в форме напишите следующий код: Private Sub Command1_Click()
Animation1.Open "File.avi" 'имя вашего файла и путь к нему
Animation1.Play
End Sub
Private Sub Command2_Click()
Animation1.Close
End Sub
|
При попытке открыть закодированный avi или со звуковым сопровождением - выдается сообщение об ошибке. VB был бы достаточно скучен, если бы работал только с таким видом файлов. Но тут на помощь приходят вездесущие API - и мы получаем возможность работать с закодированными и озвученными файлами. Для работы используется библиотека winmm.dll. Поместите следующий код в модуль проекта: Declare Function mciSendString Lib "winmm" Alias "mciSendStringA" _
(ByVal lpstrCommand As String, _
ByVal lpstrReturnString As String, _
ByVal uReturnLength As Long, _
ByVal hwndCallback As Long) As Long
|
А далее я приведу два способа просмотра звуковых avi файлов. В первом случае демонстрация идет в отдельном окне, размеры которого соответствуют истинным размерам видио. Поместите на форму две кнопки и следующий код в форму проекта: Private Sub Command1_Click()
Dim returnstring As String
Dim FileName As String
returnstring = Space(127) 'переименуйте в свой .avi
FileName = "NewS.avi"
erg = mciSendString("open " & Chr$(34) & FileName & _
Chr$(34) & " type avivideo alias video", returnstring, 127, 0)
'erg = mciSendString("set video time format ms", returnstring, 127, 0)
erg = mciSendString("play video from 0", returnstring, 127, 0)
End Sub
Private Sub Command2_Click()
erg = mciSendString("close video", returnstring, 127, 0)
End Sub
|
Второй способ - здесь в качестве экрана используется PictureBox. Размер изображения видио будет соответствовать размеру PictureBox.Поместите на форму PictureBox и одну кнопку. В модуль проекта добавте следующие декларации:
Option Compare Database
Option Explicit
Declare Function mciSendString Lib "winmm" Alias "mciSendStringA" _
(ByVal lpstrCommand As String, _
ByVal lpstrReturnString As String, _
ByVal uReturnLength As Long, _
ByVal hwndCallback As Long) As Long
Declare Function mciGetErrorString Lib "winmm" Alias "mciGetErrorStringA" _
(ByVal dwError As Long, _
ByVal lpstrBuffer As String, _
ByVal uLength As Long) As Long
Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" _
(ByVal lpszLongPath As String, _
ByVal lpszShortPath As String, _
ByVal cchBuffer As Long) As Long
Public Const WS_CHILD = &H40000000
|
Этот код напишите в форме проекта: Sub PlayAVIPictureBox(FileName As String, ByVal Window As PictureBox)
Dim RetVal As Long
Dim CommandString As String
Dim ShortFileName As String * 260
Dim deviceIsOpen As Boolean
RetVal = GetShortPathName(FileName, ShortFileName, Len(ShortFileName))
FileName = Left$(ShortFileName, RetVal)
CommandString = "Open " & FileName & " type AVIVideo alias AVIFile parent " _
& CStr(Window.Hwnd) & " style " & CStr(WS_CHILD)
RetVal = mciSendString(CommandString, vbNullString, 0, 0&)
If RetVal Then GoTo error
deviceIsOpen = True
Picture CommandString = "put AVIFile window at 0 0 " & CStr(Window.ScaleWidth / _
Screen.TwipsPerPixelX) & " " & CStr(Window.ScaleHeight / _
Screen.TwipsPerPixelY)
RetVal = mciSendString(CommandString, vbNullString, 0, 0&)
If RetVal <> 0 Then GoTo error
CommandString = "Play AVI File wait"
RetVal = mciSendString(CommandString, vbNullString, 0, 0&)
If RetVal <> 0 Then GoTo error
CommandString = "Close AVIFile"
RetVal = mciSendString(CommandString, vbNullString, 0, 0&)
If RetVal <> 0 Then GoTo error
Exit Sub
error:
Dim ErrorString As String
ErrorString = Space$(256)
mciGetErrorString RetVal, ErrorString, Len(ErrorString)
ErrorString = Left$(ErrorString, InStr(ErrorString, vbNullChar) - 1)
If deviceIsOpen Then
CommandString = "Close AVIFile"
mciSendString CommandString, vbNullString, 0, 0&
End If
Err.Raise 999, , ErrorString
End Sub
End Sub
|
Теперь для запуска видео напишите для кнопки "Пуск" следующий код: Private Sub Command1_Click()
'Вместо "NewS.avi" свой файл
PlayAVIPictureBox "NewS.avi", Picture1
End Sub
|
Этим способом можно проигрывать практически любые avi файлы, если конечно в вашей системе зарегистрированы соответствующие кодеки. Возникают проблемы с воспроизведением XviD MPEG4 - по крайней на моем компьютере в самом начале фильм отчаянно тормозил минуты три - а потом наоборот рванул, наверстывая упущенное время и все без звука. В общем - не получилось...Но унывать не стоит, сейчас я подхожу к описанию самого мультимедийного элемента управления - Windows Media Player. Пользователям Windows ME и XP известен многофункциональный проигрыватель Windows Media. Программистам на VB доступен элемент управления, составляющий основу этого проигрывателя MSDXM.OCX. Поместите на форму Проект->Компоненты->Windows Media Player. Выглядит он примерно так: Разнообразные настройки параметров позволяют настроить внешний вид и элементы управления проигрывателя. Он поддерживает множество популярных мультимедийных форматов в том числе и звуковые форматы MP3 и плейлисты M3U. И что самое приятное для его работы не нужно ни одной строчки кода, если в параметрах задать имя файла: MediaPlayer1.FileName = "C:File.avi" Правда, тогда придется смотреть или слушать всегда один и тот же файл. Но буквально несколько строк кода превратят этот элемент управления в настоящий универсальный проигрыватель. Поместите на форму CommonDialog для комфортного выбора файлов, и что бы не раздражала унылая картинка Windows Media закройте её PictureBox соответствующего размера. Самое интересное, что PictureBox становится прозрачным при воспроизведении видео, и закрывает надпись при прослушивании музыки!. Вставьте код в форму проекта для пункта меню "Open": Private Sub mnuOpen_Click()
Dim MP3File As String
CommonDialog1.ShowOpen
MP3File = CommonDialog1.FileName
MediaPlayer1.FileName = MP3File
End Sub
| Этот проигрыватель отлично воспроизводит XviD MPEG4, в том числе и в полноэкранном режиме. Еще важным достоинством этого проигрывателя является поддержка формата WMV, который оптимизирован для передачи по компьютерным сетям. Видео файлы этого формата имеют небольшие размеры при удовлетворительном качестве воспроизведения. Так звуковой видеофайл формата MPEG4 длительностью 15 сек. имеет размер около 2 Мб, а этот же файл, закодированный в формате wmv и оптимизированный для скорости 128 Кбитсек всего около 200 Кб. а для скорости 56 Кбитсек всего около 60 Кб. но его качество заметно хуже. Есть ещё один способ воспроизведения файлов формата WMV и GIF анимации - при помощи элемента WebBrowser. Этот стандартный инструмент для проектирования броузера отлично работает в качестве проигрывателя! Для установки этого компонента подключите MIcrosoft Internet Controls к вашему проекту(подробнее тут), после чего разместите его на форме так, что бы размеры не были слишком маленькими - это будущий экран. Разместите кнопку "Пуск". Код формы такой : Private Sub Command1_Click()
Dim Mult As String
Pat = App.Path & "vid1.wmv" ' имя вашего файла
Mult = "about:<html><body bgcolor=#0033CC scroll='no'><img border='0' dynsrc=" & "'" & Pat & "'" & " start='fileopen' </body></html>"
WebBrowser1.Navigate Mult
WebBrowser1.Visible = True
End Sub |
Аналогично элемент WebBrowser используется для отображения GIF анимации. Для отображения Flash (.swf) анимации в VB используется элемент ShockwaveFlash ( flash.ocx). Для установки этого компонента подключите его к вашему проекту. Разместите его на форме, сделайте размер побольше и разместите следующий код: Private Sub mnuOpen_Click() ShockwaveFlash1.Movie = App.Path & "/Anima.swf" ' Имя вашего файла ShockwaveFlash1.Menu = True MediaPlayer1.Visible = False End Sub |
Этот код для меню "Open", если использовать кнопку - то надо соответственно переписать название процедуры. Правым щелчком мыши на запущенном приложении открывается меню, где есть необходимые опции для работы с файлом. Примеры к статье можно скачать тут: |