| 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. |