Нужно заставить новый плеер открывать видео в 1С:Образовании. На данный момент выделяется место под плеер, похоже, что регистрируется компонента ActiveX, уже пытается играть поток. Но ссылку на файл плеер не получает, следовательно, мы не можем загрузить видео внутрь или открыть внешним плеером.
Из недореализованных интерфейсов на момент отображения окна вызывается на данный момент 5 штук: {342D1EA0-AE25-11D1-89C5-006008C3FBFC} IClassFactoryEx {25336920-03F9-11CF-8FD0-00AA00686F13} HTMLDocument {BB1A2AE1-A4F9-11CF-8F20-00805F2CD064} IActiveScript Также вызываются 2 неизвестных интерфейса, описания которых нет (не нашёл) в инете: {6D5140D3-7436-11CE-8034-00AA006009FA} {719C3050-F9D3-11CF-A493-00400523A8A0}
Плеер отрабатывает в соответствии с функцией function fnPlayWinMediaPlayer(objId) { try { var obj = document.all(objId); if ( obj.controls.isAvailable('Play') ) { if ( obj.playState != 3 ) { obj.controls.play(); } } ... Загрузка файла и его атрибутов видимо делается через PARAM VALUE, что-то вроде: <PARAM VALUE="Resource?guid=A2E200C2-BFA8-001A-00FF-0239B283B7D8" NAME="URL"/> Ни URL, ни другие параметры плеер своим появлением не тревожат.
Created attachment 510 [details] html-код html-код страницы, содержащей объект плеера
Можно посмотреть в сторону плагина для Firefox(Gecko) "GenRes" он позволяет писать свои обработчики тегов <object> и <embeded>, но его версия есть только под Linux, есть исходники на SourceForge, возможно можно его адаптировать под wine.
Плеер вызывается (через IPersistPropertyBag::Load), но передаётся относительная ссылка fixme:wmp:PersistPropertyBag_Load L"url" = "Resource?guid=E43D1A61-0A01-01FD-00EB-E333BCB22961" Команда "wine start mplayer <url>" конечно же не открывает такой фрагмент. Нужна реализация открытия файлов по относительному пути.
К сожалению, пример вставки объекта был запрятан неудобным образом. Вставляется он так: <OBJECT classid="clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6" width="384" height="352" id="pictureRes"> <PARAM VALUE="Resource?guid=A2E200C2-BFA8-001A-00FF-0239B283B7D8" NAME="URL"/> <PARAM VALUE="-1" NAME="autoStart"/> ... </OBJECT> Несмотря на то, что рекомендовано задавать URL в свойстве DATA тэга OBJECT, здесь путь передаётся через параметр с именем URL. http://www.informika.ru/text/inftech/proglang/activex/kirsanov/activex.html Рекомендуемого явно заданного base (в котором хранится url к текущей странице) нет, возможно он передаётся неявно. Пример регистрации и использования обработчика Mime-типов здесь: http://support.microsoft.com/kb/165072 ДЛя начинающих есть описание использования здесь: http://www.piter.com/lib/978531400056/activex.phtml?fil=ax_13 При этом там упоминается URLDownloadToCacheFile для получения данных объекта. Описание встраивания проигрывателя: http://www.mioplanet.com/rsc/embed_mediaplayer.htm Самое главное, что там указан параметр baseURL Specifies the base URL used for relative path resolution with URL script commands that are embedded in media items. Также в основном встречаются примеры указания URL в параметрах filename и src, стоит их поддержку тоже реализовать.
Посмотрев через IPropertyBag2 на страницу, отображаемую в IE, получили список передаваемых свойств: [0] L"URL" [1] L"autoStart" [2] L"volume" [3] L"mute" [4] L"uiMode" [5] L"windowlessVideo" [6] L"enabled" [7] L"enableContextMenu" [8] L"fullScreen" [9] L"stretchToFit" [10] L"_ExtentX" [11] L"_ExtentY"
полное определение объекта OBJECT <!ENTITY % OAlign "(texttop|middle|textmiddle|baseline| textbottom|left|center|right)"> <!ELEMENT OBJECT - - (PARAM | %body.content)*> <!ATTLIST OBJECT %attrs -- id, class, style, lang, dir, title -- declare (declare) #IMPLIED -- declare but don't instantiate flag -- classid %URL #IMPLIED -- identifies an implementation -- codebase %URL #IMPLIED -- some systems need an additional URL -- data %URL #IMPLIED -- reference to object's data -- type CDATA #IMPLIED -- Internet content type for data -- codetype CDATA #IMPLIED -- Internet content type for code -- standby CDATA #IMPLIED -- message to show while loading -- align %OAlign #IMPLIED -- positioning inside document -- height %Length #IMPLIED -- suggested height -- width %Length #IMPLIED -- suggested width -- border %Length #IMPLIED -- suggested link border width -- hspace %Length #IMPLIED -- suggested horizontal gutter -- vspace %Length #IMPLIED -- suggested vertical gutter -- usemap %URL #IMPLIED -- reference to image map -- shapes (shapes) #IMPLIED -- object has shaped hypertext links -- name %URL #IMPLIED -- submit as part of form -- alt CDATA #IMPLIED -- textual alternative -- tabindex NUMBER #IMPLIED -- position in tabbing order -- >
Код определения Url из компонента ActiveX: http://www.codeguru.com/cpp/i-n/internet/activex/article.php/c6151/
Вот конкретный пример получения атрибута из объекта: http://www.eggheadcafe.com/aspnet_answers/vcactivextemplatelib/Aug2006/post27695737.asp
(In reply to comment #9) > Код определения Url из компонента ActiveX: > http://www.codeguru.com/cpp/i-n/internet/activex/article.php/c6151/ Поместив аналогичный код в IOleObject::SetClientSite получаем такой url: L"http://euclid:8090/1CEduWeb/objViewer_nav.jsp?objId=1430&objType=1&templName=" Для того, чтобы получить url на видео, нужно оставить "http://euclid:8090/1CEduWeb/" и добавить наш относительный URL
Сделал хак для получения базового пути. Проблемы теперь две: 1) mplayer url не может получить доступ к файлу на сервере 1С:Образования (см. связанную багу) 2) В случае передачи полного пути возможно "приклеивания" его к "базовому". Нужно сделать определение того, относительный или полный путь передаётся в свойстве "url".
Проблему с невозможностью подключения к серверу можно решить с помощью скачивания файла функцией URLDownloadToFileW(). Нужно корректно написать сохранение в кеш (c:\windows\temp?), и вызов плеера с этим адресом.
Загрузка видео работает. 1. Относительная ссылка формируется в Load 2. Базовый URL определяется в SetClientSite 3. IWMPControls_Play инициирует проигрывание
Закрыть можно, убедившись в том, что через gecko Образование работает с плеером. Пока что мешает открытая бага #2033. С IE загрузка видео работает нормально.
Бага с открытием видео исправлена. Ждём исправления gecko перед переводом в CLOSED.