Как реализовать совместное использование экранов для веб-приложения?
Пролог Я хотел спросить, как создать решение для совместного использования экрана рабочего стола в Интернете, но потом выяснил, что таких вопросов много. И эта задача довольно сложна, чтобы ответить на нее в несколько строк. Поэтому я потратил некоторое время, пытаясь найти подходящее решение. Кажется, я нашел один - просто хочу поделиться им.
Начальная задача: у нас есть веб-приложение. Нам нужно найти способ для пользователя поделиться своим экраном с другими пользователями. Реализовано на: Win 7 x64, Java, Wowza-3.5.0.
Как мы можем достичь этого?
1 ответ
Весь процесс в нескольких словах: по ссылке на веб-странице с помощью JavaWebStart (jlnp) пользователь запускает Swing-приложение, написанное на Java, которое каждую секунду делает скриншот своего рабочего стола. После этого он кодирует его как видеопоток и отправляет этот поток на Wowza-сервер. Wowza может передавать этот поток любому количеству пользователей, которые могут получить доступ к потоку через flash-плеер.
Подробные шаги:
1. Установите Wowza(обязательно).
- Получить соответствующий установщик (в моем случае для Win) здесь: http://www.wowza.com/pricing/installer
- Получите бесплатную лицензию разработчика здесь: http://www.wowza.com/pricing/trial (вам нужно будет указать адрес электронной почты, ключ будет действителен в течение 180 дней).
- Следите за хорошим видео о процессе: http://www.wowza.com/forums/content.php?288-Getting-Started-(Video-Tutorial)
Далее я буду ссылаться на каталог установки wowza как [wowza-root]
Шаг проверки: после завершения установки - Пуск - Все приложения - Wowza Media Server 3.5.0 - Запуск Wowza. Когда сервер будет запущен и вы увидите сообщение
“Wowza Media Server is started!”
откройте браузер и введите:
http://localhost:1935/
Вы должны увидеть что-то вроде этого:
Wowza Media Server 3 Developer Edition (Expires: авг 03, 2013) 3.5.0 build2989
Если так - мы сделали первый шаг.
2. Запустите пример фильма на Wowza(необязательно).
Следующий шаг - на самом деле поток некоторого контента и [wowza-root] имеет все необходимое для этого.
- Введите каталог [wowza-root]\ examples
- RightMouse нажмите на installall.bat и выберите "Запуск от имени администратора", чтобы установить все необходимые проигрыватели.
- Введите dir [wowza-root]\ examples \ VideoOnDemandStreaming \ FlashHTTPPlayer ** и нажмите **player.html, чтобы запустить этот файл в браузере. Нажмите подключиться. Пошаговая проверка: вы должны увидеть смешной фильм про кролика. Вы можете подать файл с этим фильмом здесь: [wowza-root]\ content \ sample.mp4
3. SWING-приложение для совместного использования рабочего стола (обязательно).
Хорошо, наш сервер запущен и работает (WOWZA IS RUNNING). Теперь пришло время запустить приложение, которое будет делать скриншоты нашего рабочего стола. К счастью, это уже написано Dele Olajide, благослови бог этого человека. Проверьте эту ссылку для получения подробной информации ( http://code.google.com/p/red5-screenshare/) и загрузите ее ( http://code.google.com/p/red5-screenshare/downloads/list) - Вам нужно скачать файл ScreenShare.zip.
Распакуйте его в любой каталог. Мы начнем с запуска этого приложения из bat-файла. В распакованном каталоге уже есть два файла bat - do_run1.bat и do_run2.bat. Я просто скопировал один из этих файлов и назвал его do_run_my.bat, и его содержимое должно выглядеть так:
"C:\Program Files\Java\jdk1.6.0_26\bin\java" -classpath screenshare.jar org.redfire.screen.ScreenShare localhost screenshare 1935 ss1 flashsv1
pause
где
- "C:\Program Files\Java\jdk1.6.0_26\bin\java" - правильный путь к вашей java
- Screenhare.jar - какой JAR мы должны использовать (можно найти в разархивированной папке).
- org.redfire.screen.ScreenShare - основной класс
- localhost - хозяин Wowza
- ScreenShare - имя приложения (важно)
- 1935 - порт Wowza
- ss1 - имя потока (важно)
- flashsv1 - кодировка для вашего видеопотока.
Единственное, что вам нужно изменить - это установить правильный путь к вашей Java. Вы можете запустить его сейчас!
Шаг проверки: вы должны увидеть экран приложения. Огромный успех! Но если вы нажмете кнопку "Начать совместное использование", вы получите сообщение об ошибке в консоли, что папка приложения ScreenShare отсутствует в Wowza. Это нормально и означает, что сейчас мы на правильном пути. Выход из SWING-приложения.
[ERROR] [New I/O client worker #2-1] org.redfire.screen.ScreenClientHandler - closing channel, server resonded with error: [0 COMMAND_AMF0 c3 #0 t0 (0) s207] name: _error, transactionId: 1, object: null, args: [{level=error, code=NetConnection.Connect.Rejected, description=Connection failed: Application folder ([install-location]/applications/screenshare) is missing., clientid=8.87236417E8}]
4. Настройте WOWZA на прием потока из нашего приложения SWING (обязательно).
- Введите [wowza-root]\ Applications и создайте там папку с именем screenhare (обратите внимание - это точно то же имя, что и имя приложения в нашем SWING-приложении)
- Введите [wowza_root]\conf и снова создайте папку screenhare.
- В [wowza_root]\conf вы можете найти файл с именем Application.xml. Скопируйте этот файл в папку [wowza_root]\conf\ ScreenShare, которую вы только что создали.
Измените некоторые свойства в Application.xml. Установите эти значения:
StreamType = live HTTPStreamers = cupertinostreaming, плавный поток,sanjosestreaming LiveStreamPacketizers=cupertinostreamingpacketizer, плавный поток packetizer, sanjosestreamingpacketizer PlayMethod= нет
Теперь перезапустите Wowza.
Шаг проверки: снова запустите SWING-APP через bat-файл. Теперь вместо ошибки вы должны увидеть что-то вроде этого, это означает, что соединение с сервером установлено:
[INFO] [New I/O client worker #1-1] org.redfire.screen.ScreenClientHandler - onStatus code: NetStream.Publish.Start
+++ [0 VIDEO c5 #1 t166 (0) s255355]
+++ [1 VIDEO c5 #1 t1169 (1003) s116522]
+++ [1 VIDEO c5 #1 t2171 (1002) s53049]
+++ [1 VIDEO c5 #1 t3178 (1007) s53667]
5. Просмотр вашего потока (необязательно). Теперь самое приятное - посмотреть, как все эти сотрудники работают вместе. - Введите [wowza-root]\examples\LiveVideoStreaming\FlashRTMPPlayer** и запустите **player.html. Обратите внимание, что в обоих нижеприведенных параметрах используются имя приложения и имя потока, которые точно такие же, как мы настроили в нашем SWING-APP.
Server: rtmp://localhost/screenshare
Stream: ss1
И нажмите кнопку "Подключить".
Шаг проверки: вы увидите ваш общий рабочий стол! Итак, задача выполнена - по крайней мере, ее начальный этап.
6. Запуск flash-плеера в сети (опционально) Отлично! Теперь у нас есть рабочее решение, только одна вещь, которая еще не сделана - мы запускаем проигрыватель из каталога Windows, и он не доступен для других людей в Интернете. Итак - в чем проблема, давайте развернем один.
- Сначала вам нужно прочитать это: http://www.wowza.com/forums/content.php?49
- Затем перейдите на http://www.osmf.org/configurator/fmp/
- Вставьте в поле "Видеоисточник" ссылку на ваш поток (разумеется, SWING-APP должен работать в режиме общего доступа): rtmp: // localhost: 1935 /screenhare/ss1
- Нажмите Предварительный просмотр. Вы должны увидеть свой поток.
- Теперь просто скопируйте весь код из "Preview Embed Code" на любую веб-страницу, которая фактически развернута на сервере приложений - и это все. Вы можете дать ссылку на эту страницу любому пользователю, и он сможет видеть ваш поток.
7. Переход к динамическому названию потока вместо статического (необязательно)
Как вы, наверное, заметили, сейчас наше совместное использование экрана работает, но поскольку мы передаем имя потока через конфигурацию в наше SWING-APP, нет возможности использовать его для более чем одного пользователя одновременно. Я не буду подробно описывать, как с этим обращаться, просто сделаю короткую заметку.
Если вы посмотрите на screenhare.jar, то обнаружите, что этот jar-файл фактически содержит весь скомпилированный и исходный код SWING-приложения. Можно изменить исходный код и переделать исходное приложение в соответствии с вашими потребностями. В моем случае я просто добавил текущее время в миллисекундах к имени и сообщению предоставленного потока, которое показывает что-то вроде этого после нажатия кнопки "Начать поток":
Send this link to any person you want to share you screen with:
http://localhost:8080/player.htm?src=rtmp%3A%2F%2Flocalhost%3A1935%2Fscreenshare%2Fss1360243745881
Как вы видите по ссылке - я просто добавляю адрес потока в виде строки запроса к URL, где находится моя HTML-страница со встроенным кодом проигрывателя. Также я хочу предоставить код этой страницы. Все довольно просто - с помощью javascript я извлек параметр из строки запроса и поместил извлеченный параметр туда, где он должен быть на моей html-странице со встроенным кодом из п.6
<html>
<head></head>
<body>
<SCRIPT LANGUAGE="JavaScript">
var myQueryString = document.location.search;
// remove the '?' sign if exists
if (myQueryString[0] = '?') {
myQueryString = myQueryString.substr(1, myQueryString.length - 1);
}
document.write(
'<object width="600" height="409">\n' +
'<param name="movie" value="http://fpdownload.adobe.com/strobe/FlashMediaPlayback.swf" />\n' +
'</param>\n' +
'<param name="flashvars" value="' + myQueryString +'" />\n' +
'</param>\n' +
'<param name="allowFullScreen" value="true" />\n' +
'</param>\n' +
'<param name="allowscriptaccess" value="always" />\n' +
'</param>\n' +
'<embed src="http://fpdownload.adobe.com/strobe/FlashMediaPlayback.swf" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="600" height="409" flashvars="' + myQueryString +'"></embed>\n' +
'</object>'
);
</SCRIPT>
</body>
</html>
Это все. Надеюсь, это сэкономит кому-то время. Удачи