Потоковое видео из плагина в браузер - PullRequest
1 голос
/ 19 ноября 2011

Я пишу плагин для браузера, который получает поток видео QVGA.Я хотел бы передать это видео в браузер способом, который может быть программно связан с JavaScript - например, чем-то, что может быть передано на холст, например, элементом или объектом Image ().

ПРИМЕЧАНИЕЭто означает, что я пытаюсь избежать рисования моего плагина в окне - я знаю, что могу это сделать, но я хочу что-то, что хорошо взаимодействует с остальной частью рендеринга страницы, а также имеет хорошо известную объектную модель, которую я выигралНе нужно реализовывать.

Сложность в том, как сделать это быстро - я могу сделать это, например, установив свойство src, чтобы иметь данные в кодировке base64, но накладные расходы довольно высоки.

Мой вопрос заключается в том, есть ли способ избежать дополнительных затрат (например, заполнить буфер необработанного изображения вместо форматирования изображения и кодировать base64 только для того, чтобы браузер его декодировал) - то, что у меня есть сейчас, не так быстродостаточно.

Что касается среды, я использую Firebreath, чтобы написать плагин (C ++ с NPAPI / ActiveX в основном абстрагированы), и яхочу сохранить поддержку Mac и Windows у меня есть.Принятие непосредственного использования NPAPI приемлемо, но я бы предпочел этого не делать.

РЕДАКТИРОВАТЬ: Я решил проблему, используя элемент и обновив его свойство src до битовой карты в кодировке base64, используясхема пользовательского интерфейса данных - (например, imageJSObject-> SetProperty ('src', 'data: image / bmp; base64,«);Производительность не велика, но достаточно хороша.Основное предостережение заключается в том, что по крайней мере в Chrome 15 onload срабатывает только один раз, а не каждый раз, когда я изменяю свойство src, поэтому я должен генерировать свое собственное событие после каждого обновления.

1 Ответ

1 голос
/ 19 ноября 2011

Нет высокопроизводительных методов для отправки двоичных данных на страницу;вы могли бы предположительно использовать тег видео html5 для потоковой передачи, и в этом случае вы могли бы предоставить источник веб-сервера в своем плагине, но, насколько возможно, на самом деле отправка двоичных данных в javascript base64 - ваш самый быстрый метод.

Вклс другой стороны, если бы вы использовали плагин без окон, вы должны были бы рисовать по команде (вы можете вызвать InvalidateWindow в PluginWindow, чтобы запросить перерисовку), и вы бы рисовали в hDC, но вы бы участвовали в упорядочении DOM.,Это специфично для Windows;на Mac вы можете сделать то же самое, если вы рисуете с CoreGraphics (CoreAnimation в некоторых, но не во всех браузерах).

Что касается получения данных в javascript, вы можете использовать сокеты (и что-то в браузере длязапросить их у localhost (например, websockets или xmlhttprequest или что-то в этом роде) или кодировать в base64 и отправить в виде строки.В NPAPI пока нет возможностей двоичных данных.

...