如何实现Web应用程序的屏幕共享?

时间:2013-02-07 16:08:12

标签: java swing rtmp wowza screensharing

序言即可。我想问一下,如何在网络上创建桌面屏幕共享解决方案,但后来发现有很多这样的问题。用几个字符串来回答这个任务非常复杂。所以我花了一些时间试图找到合适的解决方案。似乎我找到了一个 - 只是想分享它。

初始任务:我们有一个Web应用程序。我们需要找到一种方式让用户与任何其他用户共享他的屏幕。实现于:Win 7 x64,Java,Wowza-3.5.0。

我们如何实现这一目标?

1 个答案:

答案 0 :(得分:14)

用几句话来表达整个过程:在JavaWebStart(jlnp)的帮助下,通过网页上的链接,用户启动用Java编写的Swing应用程序,每秒对其桌面进行截图。在此之后,它将其编码为videostream并将此流发送到Wowza-server。 Wowza能够将此流重新播放给任意数量的用户,这些用户可以通过Flash播放器访问流。

详细步骤:

<强> 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]拥有所需的一切。

  • 输入目录 [wowza-root] \ examples
  • RightMouse点击 installall.bat 并选择“以管理员身份启动”以安装所有必要的播放器。
  • 输入dir [wowza-root] \ examples \ VideoOnDemandStreaming \ FlashHTTPPlayer **并点击** player.html ,在浏览器中启动此文件。单击连接。 一步检查:你应该看看关于兔子的搞笑电影。你可以在这里提交这部电影: [wowza-root] \ content \ sample.mp4

第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-file启动此应用程序。已解压的目录中已有两个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

,其中

  • &#34; C:\ Program Files \ Java \ jdk1.6.0_26 \ bin \ java&#34; - 正确的java路径
  • screenshare.jar - 我们应该使用什么jar(可以在解压缩的文件夹中找到)。
  • org.redfire.screen.ScreenShare - 主要类
  • localhost - Wowza的主持人
  • screenhare - 应用程序名称(重要)
  • 1935年 - Wowza港
  • ss1 - 流名称(重要)
  • flashsv1 - 视频流的编码。

您需要更改的唯一方法是设置java的正确路径。你现在可以启动它了!

步骤检查:您应该看到应用程序屏幕。巨大的成功!但是,如果单击“开始共享”按钮,您将在控制台中收到错误,Wowza中缺少屏幕共享应用程序文件夹。没关系,这意味着现在我们正走在正确的轨道上。退出SWING-application。

[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的流(必填)。

  • 输入 [wowza-root] \ applications 并在其中创建名称为 screenshare 的文件夹(注意 - 这与我们的SWING-app中的应用名称完全相同)
  • 输入 [wowza_root] \ conf ,然后再次创建文件夹屏幕共享
  • [wowza_root] \ conf 中,您可以找到名称为 Application.xml 的文件。将此文件复制到刚刚创建的 [wowza_root] \ conf \ screenshare 文件夹中。
  • 更改 Application.xml 中的一些属性。设置此值:

    流类型=活 HTTPStreamers = cupertinostreaming,smoothstreaming,sanjosestreaming LiveStreamPacketizers = cupertinostreamingpacketizer,smoothstreamingpacketizer,sanjosestreamingpacketizer PlayMethod =无

  • 现在重启Wowza。

步骤检查:再次通过bat-file启动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播放器(可选) 大!现在我们有了工作解决方案,只有一件事还没有完成 - 我们正在从Windows目录启动播放器,而网络上的其他人无法访问它。那么 - 问题是什么,让我们部署一个。

  • 首先,您需要仔细阅读:http://www.wowza.com/forums/content.php?49
  • 接下来转到http://www.osmf.org/configurator/fmp/#
  • 在“视频源”字段中插入您的信息流链接(当然,SWING-APP应该在共享模式下工作): rtmp:// localhost:1935 / screenshare / ss1
  • 单击“预览”。你应该看到你流。
  • 现在只需将“预览嵌入代码”中的整个代码复制到实际部署在应用程序服务器上的任何网页 - 这就是全部。您可以向任何用户提供此页面的链接,他将能够看到您的信息流。

<强> 7。转到动态流名称而不是静态(可选)

正如您可能已经注意到的,现在我们的屏幕共享正在运行,但由于我们通过配置向我们的SWING-APP提供流名称,因此无法同时为多个用户使用它。我不会详细描述如何处理它,只需简短说明。

如果你检查 screenshare.jar ,你会发现这个jar实际上包含了SWING-application的所有编译和源代码。可以根据需要修改源和返工初始应用程序。在我的情况下,我只是将当前时间(以毫秒为单位)添加到提供的流名称和消息窗口,在单击“开始流”按钮后显示类似的内容:

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的帮助下,我从请求字符串中提取参数,并将提取的参数放在我的html页面上,其中包含来自p.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>

就是这样。我希望这会节省一些时间。祝你好运