Summary: | Работа плеера в 1С:Образовании | ||
---|---|---|---|
Product: | Wine School | Reporter: | Константин Кондратюк <kondratyuk> |
Component: | 1С Образование | Assignee: | Константин Кондратюк <kondratyuk> |
Status: | CLOSED FIXED | QA Contact: | |
Severity: | normal | ||
Priority: | P5 | CC: | baraka, ivan, lav, night, pav |
Version: | 0.7 | ||
Target Milestone: | --- | ||
Hardware: | PC | ||
OS: | Linux | ||
Whiteboard: | |||
Заявки RT: | Связано с: | ||
Дата напоминания: | |||
Bug Depends on: | 2033, 2024, 2026 | ||
Bug Blocks: | 2120, 934, 1527 | ||
Attachments: | html-код |
Description
Константин Кондратюк
2008-06-23 19:37:23 MSD
Из недореализованных интерфейсов на момент отображения окна вызывается на данный момент 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. |