Bug 1978

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
Нужно заставить новый плеер открывать видео в 1С:Образовании.
На данный момент выделяется место под плеер, похоже, что регистрируется компонента ActiveX, уже пытается играть поток. Но ссылку на файл плеер не получает, следовательно, мы не можем загрузить видео внутрь или открыть внешним плеером.
Comment 1 Константин Кондратюк 2008-06-24 02:03:22 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}
Comment 2 Константин Кондратюк 2008-06-24 10:02:40 MSD
Плеер отрабатывает в соответствии с функцией
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, ни другие параметры плеер своим появлением не тревожат.
Comment 3 Константин Кондратюк 2008-06-24 10:53:19 MSD
Created attachment 510 [details]
html-код

html-код страницы, содержащей объект плеера
Comment 4 Синицын Иван 2008-06-26 17:03:15 MSD
Можно посмотреть в сторону плагина для Firefox(Gecko) "GenRes" он позволяет писать свои обработчики тегов <object> и <embeded>, но его версия есть только под Linux, есть исходники на SourceForge, возможно можно его адаптировать под wine.
Comment 5 Константин Кондратюк 2008-06-28 20:02:35 MSD
Плеер вызывается (через IPersistPropertyBag::Load), но передаётся относительная ссылка
fixme:wmp:PersistPropertyBag_Load L"url" = "Resource?guid=E43D1A61-0A01-01FD-00EB-E333BCB22961"

Команда "wine start mplayer <url>" конечно же не открывает такой фрагмент.
Нужна реализация открытия файлов по относительному пути.
Comment 6 Vitaly Lipatov 2008-06-29 01:56:59 MSD
К сожалению, пример вставки объекта был запрятан неудобным образом. Вставляется он так:
<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, стоит их поддержку тоже реализовать.

Comment 7 Константин Кондратюк 2008-06-29 13:21:04 MSD
Посмотрев через 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"
Comment 8 Vitaly Lipatov 2008-06-29 13:42:25 MSD
полное определение объекта 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 --
  >
Comment 9 Vitaly Lipatov 2008-06-29 14:20:39 MSD
Код определения Url из компонента ActiveX:
http://www.codeguru.com/cpp/i-n/internet/activex/article.php/c6151/
Comment 10 Vitaly Lipatov 2008-06-29 14:29:59 MSD
Вот конкретный пример получения атрибута из объекта:
http://www.eggheadcafe.com/aspnet_answers/vcactivextemplatelib/Aug2006/post27695737.asp
Comment 11 Константин Кондратюк 2008-06-29 16:17:58 MSD
(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
Comment 12 Константин Кондратюк 2008-06-29 18:02:13 MSD
Сделал хак для получения базового пути.

Проблемы теперь две:
1) mplayer url не может получить доступ к файлу на сервере 1С:Образования (см. связанную багу)
2) В случае передачи полного пути возможно "приклеивания" его к "базовому". Нужно сделать определение того, относительный или полный путь передаётся в свойстве "url".
Comment 13 Константин Кондратюк 2008-06-30 14:08:35 MSD
Проблему с невозможностью подключения к серверу можно решить с помощью скачивания файла функцией URLDownloadToFileW().
Нужно корректно написать сохранение в кеш (c:\windows\temp?), и вызов плеера с этим адресом.
Comment 14 Константин Кондратюк 2008-07-12 01:35:09 MSD
Загрузка видео работает.
1. Относительная ссылка формируется в Load
2. Базовый URL определяется в SetClientSite
3. IWMPControls_Play инициирует проигрывание
Comment 15 Константин Кондратюк 2008-07-12 01:36:54 MSD
Закрыть можно, убедившись в том, что через gecko Образование работает с плеером. Пока что мешает открытая бага #2033.

С IE загрузка видео работает нормально.
Comment 16 Константин Кондратюк 2008-09-25 10:08:47 MSD
Бага с открытием видео исправлена. Ждём исправления gecko перед переводом в CLOSED.