序言 。我想问一下,如何为网络上的桌面屏幕共享创建解决方案,但是后来发现有很多这样的问题。要用几串来回答这个任务是相当复杂的。所以我花了一些时间试图找到合适的解决方案。看来我找到了一个–只想分享。
首要任务 :我们有一个Web应用程序。我们需要找到一种让用户与其他任何用户共享其屏幕的方式。实施于:Win 7 x64,Java,Wowza-3.5.0。
我们怎样才能做到这一点?
整个过程用几句话讲: 通过JavaWebStart(jlnp)的帮助下,网页上的链接,用户启动了用Java编写的Swing应用程序,该应用程序每秒对他的桌面进行截图。之后,它将其编码为视频流,并将该流发送到Wowza服务器。Wowza可以将此流重播给任意数量的用户,这些用户可以通过Flash Player访问该流。
详细步骤:
1.安装Wowza(强制性)。
此外,我将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]拥有所需的一切。
3. SWING-app共享您的桌面(强制性)。
好的,我们的服务器已启动并正在运行(WOWZA正在运行)。现在是时候启动将为我们的桌面截图的应用程序了。幸运的是,它已经由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
哪里
您唯一需要更改的-是设置Java的正确路径。您可以立即启动它!
步骤检查 :您应该看到应用程序屏幕。巨大的成功!但是,如果单击“开始共享”按钮,则会在控制台中出现错误,Wowza中缺少该screenshare应用程序文件夹。没关系,这意味着我们现在在正确的轨道上。退出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 APP的流(强制性)。
StreamType =实时HTTPStreamers = cupertinostreaming,平滑流,sanjosestreaming LiveStreamPacketizers = cupertinostreamingpacketizer,smoothstreamingpacketizer,sanjosestreamingpacketizer PlayMethod = none
步骤检查: 通过bat文件再次启动SWING-APP。现在,您应该会看到类似的内容,而不是错误,这意味着已建立与服务器的连接:
[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 Player(可选), 太好了!现在我们有了可行的解决方案,只有一件事尚未完成–我们正在从Windows目录启动播放器,并且网络上的其他人也无法访问它。所以–有什么问题,让我们部署一个。
7.转到动态流名称,而不是静态(可选)
您可能已经注意到,目前我们的屏幕共享功能正在运行,但是由于我们通过config向SWING- APP提供流名称,因此无法同时为一个以上的用户使用它。我不会详细描述如何处理,仅作简短说明。
如果您检查 screenshare.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
正如您在链接中看到的那样,我只是将流地址作为查询字符串添加到我的带有嵌入式播放器代码的html页面所在的URL中。我也想提供此页面的代码。它非常简单–在javascript的帮助下,我从请求字符串中提取了参数,并将提取的参数放在应该带有第6页嵌入式代码的html页面上的位置
<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>
就这些。我希望这可以节省一些时间。祝好运