当前位置: 首页 > 面试题库 >

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

羊舌航
2023-03-14
问题内容

序言
。我想问一下,如何为网络上的桌面屏幕共享创建解决方案,但是后来发现有很多这样的问题。要用几串来回答这个任务是相当复杂的。所以我花了一些时间试图找到合适的解决方案。看来我找到了一个–只想分享。

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

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


问题答案:

整个过程用几句话讲:
通过JavaWebStart(jlnp)的帮助下,网页上的链接,用户启动了用Java编写的Swing应用程序,该应用程序每秒对他的桌面进行截图。之后,它将其编码为视频流,并将该流发送到Wowza服务器。Wowza可以将此流重播给任意数量的用户,这些用户可以通过Flash
Player访问该流。

详细步骤:

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-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

哪里

  • “ C:\ Program Files \ Java \ jdk1.6.0_26 \ bin \ java” –正确的Java路径
  • screenshare.jar –我们应该使用哪个jar(可以在解压缩的文件夹中找到)。
  • org.redfire.screen.ScreenShare –主类
  • 本地主机– Wowza的主机
  • 屏幕共享–应用程序名称(重要)
  • 1935年– Wowza港口
  • ss1 –流名称(重要)
  • flashsv1 –视频流的编码。

您唯一需要更改的-是设置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的流(强制性)。

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

StreamType =实时HTTPStreamers = cupertinostreaming,平滑流,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/#
  • 在“视频源”字段中插入指向您的流的链接(当然,SWING-APP应该在共享模式下工作): rtmp:// localhost:1935 / screenshare / ss1
  • 单击预览。您应该会看到流。
  • 现在,只需将整个代码从“预览嵌入代码”复制到应用程序服务器上实际部署的任何网页即可,仅此而已。您可以将此页面的链接提供给任何用户,他将可以看到您的信息流。

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>

就这些。我希望这可以节省一些时间。祝好运



 类似资料:
  • 如何强制执行安全标志,或者是否有其他API调用(或包)使其成为可能? 任何原生Android或Flutter的解决方案都是受欢迎的。

  • 我有一个网页,其中包含一个表格,你可以在其中编辑每一个单元格的内容。该表的典型大小约为12列40行。教师通常使用此页面编码我们区域的成绩。但我们的区域有时连接不畅,而且有时老师会丢失他们所做的编码(他们通常只在对所有内容进行编码后才保存)。 所以现在,我正在考虑实现一个autosave特性。我认为我想的解决方案很简单:每次编辑单元格然后失去焦点时,执行一个ajax请求来保存数据。至少我是这么想的。

  • 我正在尝试使用OpenAM在现有的web应用程序中实现SSO,请参考以下链接 http://fczaja.blogspot.com/2012/06/idp-initiated-sso-and-identity_21.html ps.我的网络应用程序已经有了自己的登录页面 现在实现后得到的是,openAM登录页面在我的web应用程序中受到保护,我需要再次登录到我的应用程序 我需要的是,想跳过我的应用

  • 那么当屏幕被锁定时,是否有任何方法显示特定的XAML页面。目前我正在使用toast通知来完成此操作。但是toast通知的问题是我对UI没有太多的控制。

  • 问题内容: 我们已经建立了销售点系统,现在我们需要将其实施到 触摸屏上吗?我们是否需要依次更改任何代码以使其正常工作。 而且我们正在使用键盘输入值-假设数量- 当我关注 JTextField时,是否有Java方式弹出键盘(例如android)? 问题答案: 这是有关如何实现弹出式键盘的简单示例:

  • 问题内容: 我正在开发一个Java Web应用程序,该应用程序通过从Web服务加载的大型XML配置文件来使其行为成为基础。由于在访问应用程序的特定部分之前实际上并不需要这些文件,因此它们会延迟加载。当需要这些文件之一时,查询将发送到Web服务以检索相应的文件。由于某些配置文件可能会被大量使用,因此比其他配置文件使用的频率要高得多,我想设置某种类型的缓存(可能有1小时的过期时间),以避免一遍又一遍地