Потоковые двоичные данные через http
Я смотрю на потоковые двоичные данные в браузере (через http). Я ищу мнения относительно хороших способов сделать это. В конечном итоге у меня будет источник данных в реальном времени, и я хотел бы манипулировать этими данными и отображать их (в реальном времени) в браузере. Сначала стоит Firefox, IE был бы хорош... но я не такой привередливый. У меня есть плагин Firefox, который делает то, что мне нужно, но я бы предпочел что-то написанное в javascript / html, которое будет работать без необходимости установки каких-либо плагинов.
Я смотрел на MIME/ мультимедийный тип multipart / x-mixed-replace, и похоже, что он может быть полезен в этом проекте, но я хотел бы услышать мнения о лучших способах сделать это (если есть), прежде чем тратить слишком много много часов идет по этому пути.
Вероятно, Flash выполнит свою работу, но я бы хотел избежать плагинов. Я хотел бы иметь самое простое из возможных решений (не так ли?), В идеале просто с помощью javascript/html.
Я также изучал Comet, чтобы понять, что это может сделать для меня.
5 ответов
Многое зависит от того, что вы хотите сделать с данными. Я предполагаю сделать это.
Flash, вероятно, будет самым простым решением. Это достаточно распространенное дополнение, которое почти у всех должно быть уже сейчас; таким образом, вы не подвергаетесь большой опасности несовместимости.
JavaScript просто не считался хорошей платформой для обработки двоичных данных, поэтому в этой области не было слишком много разработок. Я не думаю, что вы найдете много помощи для того, что вы хотите. Особенно, когда вы получаете точку рендеринга - если только вы не можете преобразовать каждый двоичный файл в сценарий холста, поскольку он является единственной динамической визуализацией, доступной в JavaScript.
IE на самом деле может быть исключением, так как вы можете использовать некоторые объекты ActiveX для выполнения этого для нескольких типов файлов. Но тогда вы отключите большинство других браузеров.
Что касается потоковой передачи данных и соединений в стиле сокетов, вы можете взглянуть на проект APE (Ajax Push Engine). Это позволяет вам настроить HTTP-прокси, через который ваш JavaScript может соединяться для истинных соединений сокетов.
Что касается того, что делать с данными, когда они поступают, я проверил концепцию, показывающую, как вы можете работать с необработанными данными PNG, анализировать их и отображать в браузере. Проверьте это.
Я должен был сделать это точно с данными видео (то есть движения JPEG).
Я отмечаю, что вы только что сказали "двоичные данные"... это данные изображения или нет? что это?
В настоящее время multipart/x-mixed-replace отлично работает во многих браузерах. Я думаю, что это может даже поддерживаться в более поздних версиях IE. Это, безусловно, работает во всех версиях Firefox примерно 5 лет назад, когда мне пришлось это реализовать. Браузеры на основе Webkit, вероятно, также поддерживаются, включая Chrome и Safari.
Однако, на мой взгляд, это действительно подходит только для приложений на основе локальной сети. Причина в том, что вы отправляете МНОГО данных. Вместо отправки различий между последовательными кадрами (если это видео) вы будете отправлять цельные изображения каждый раз. В зависимости от количества пользователей, это также может стать тяжелым бременем для пропускной способности сервера.
Таким образом, хотя multipart/x-mixed-replace является наиболее простым в реализации, это не обязательно самое подходящее решение. Опять же, это зависит от вашего типа необработанных данных.
Для видео вы можете теоретически написать что-то в javascript, чтобы сделать это. На самом деле, если вы ищете Google для видеоплеера JavaScript, вы можете найти некоторые из них. Я сомневаюсь, что они ужасно быстрые и, вероятно, возложат тяжелую нагрузку на клиентскую машину. Тем не менее, это кажется выполнимым.
Итак, вы можете выбрать следующие варианты: 1) Тип контента смешанный-заменить 2) Скачать плагин Родной плагин для браузера (самый быстрый и эффективный) на основе Flash или Silverlight 3) Плеер на основе JavaScript
Если вам нужно видео, последний вариант, который находится на переднем крае, - это 4) видео на основе HTML5. http://www.html5video.org/ Поскольку стандарты все еще утверждаются, а поддержка браузеров ограничена, я бы не рекомендовал это делать в настоящее время.
Вы можете использовать Base64, чтобы преобразовать двоичный файл в текст и отправить его в браузер. С IE вы можете конвертировать его напрямую в двоичный файл, но я не уверен, что вы можете сделать это с Firefox и другими. Я видел jscripts для Base64 enflate/deflate и скрипт с именем base64.js, который, вероятно, также выполняет преобразование.
Однако вам, вероятно, лучше преобразовать двоичные данные в JSON и использовать AJAX для передачи данных, а затем обрабатывать их как объект javascript в браузере. Веб-сервер будет отвечать за сбор данных и их преобразование в JSON, поэтому вы сможете обрабатывать двоичные файлы независимо от того, какой язык программирования вы используете.
Я бы вообще не использовал multipart/x-mixed-replace, так как он имеет довольно схематичную поддержку браузера. Я знаю, что multipart / x-mixed-replace моей камеры не работает на IE или более новых версиях Firefox (хотя, очевидно, есть конфигурация, чтобы это изменить).
Я думаю, что небольшое приложение Flash может быть одним из ваших лучших вариантов.