7

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

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

我们怎样才能做到这一点?

4

1 回答 1

16

整个过程一言以蔽之:通过网页上的链接在 JavaWebStart (jlnp) 的帮助下,用户启动用 Java 编写的 Swing 应用程序,每秒都会对他的桌面进行截图。在此之后,它将其编码为视频流并将此流发送到 Wowza-server。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] 拥有它所需的一切。

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

3. SWING-app 分享你的桌面(强制)。

好的,我们的服务器启动并运行(WOWZA 正在运行)。现在是时候启动可以为我们的桌面截屏的应用程序了。幸运的是,它已经是德勒奥拉吉德写的,上帝保佑这个人。查看此链接了解详细信息 ( http://code.google.com/p/red5-screenshare/ ),并下载此链接 ( http://code.google.com/p/red5-screenshare/downloads/list ) –您需要下载 screenshare.zip 文件。

解压到任意目录。我们将从 bat 文件启动这个应用程序开始。解压后的目录中已经有两个 bat 文件 - do_run1.batdo_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 路径
  • screenshare.jar - 我们应该使用什么 jar(可以在解压缩的文件夹中找到)。
  • org.redfire.screen.ScreenShare – 主类
  • localhost – Wowza 的主机
  • 屏幕共享 – 应用程序名称(重要)
  • 1935 – 沃扎港
  • ss1 – 流名称(重要)
  • flashsv1 – 为您的视频流编码。

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

步骤检查:您应该看到应用程序屏幕。巨大的成功!但是,如果您单击“开始共享”按钮,您会在控制台中收到错误消息,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 APP 的流(强制)。

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

    StreamType=live HTTPStreamers=cupertinostreaming,smoothstreaming,sanjosestreaming LiveStreamPacketizers=cupertinostreamingpacketizer,smoothstreamingpacketizer,sanjosestreamingpacketizer PlayMethod=none

  • 现在重新启动 Wowza。

步骤检查:通过 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 目录启动播放器,网络上的其他人无法访问它。所以 - 有什么问题,让我们部署一个。

  • 首先你需要通读这个:http ://www.wowza.com/forums/content.php?49
  • 接下来去http://www.osmf.org/configurator/fmp/#
  • 在“Videosource”字段中插入指向您的流的链接(当然,SWING-APP 应该在共享模式下工作):rtmp://localhost:1935/screenshare/ss1
  • 单击预览。你应该看到你的流。
  • 现在只需将整个代码从“Preview Embed Code”复制到实际部署在应用程序服务器上的任何网页——仅此而已。您可以将此页面的链接提供给任何用户,他将能够看到您的流。

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>

就这些。我希望它会为某人节省一些时间。祝你好运

于 2013-02-07T16:08:12.403 回答