java - 如何实现网页应用的屏幕共享?

标签 java swing rtmp wowza screensharing

关闭。这个问题需要更多focused .它目前不接受答案。












想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post .

8 个月前关闭。




Improve this question




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

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

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

最佳答案

整个过程简而言之:通过网页上的链接,在 JavaWebStart (jlnp) 的帮助下,用户启动用 Java 编写的 Swing 应用程序,每秒生成一个桌面屏幕截图。在此之后,它将其编码为视频流并将此流发送到 Wowza-server。 Wowza 能够将此流重新传输给任意数量的用户,这些用户可以通过 Flash 播放器访问流。

详细步骤:

1.安装Wowza(强制)。

  • 从这里获取适当的安装程序(在我的情况下为 Win):http://www.wowza.com/pricing/installer
  • 从这里获得免费的开发者许可证:http://www.wowza.com/pricing/trial (您需要提供电子邮件,有效期为 180 天的 key 将发送到那里)。
  • 关注关于过程的精彩视频: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]\示例
  • 鼠标右键点击 installall.bat 并选择“以管理员身份启动”以安装所有必要的播放器。
  • 输入目录 [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.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 – 沃扎港
  • 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]\应用程序 并创建名为 的文件夹屏幕共享 那里(注意 - 这与我们的 SWING 应用程序中的应用程序名称完全相同)
  • 输入 [wowza_root]\conf 并再次创建文件夹 屏幕共享 .
  • [wowza_root]\conf 你可以找到一个名为 的文件应用程序.xml .将此文件复制到 [wowza_root]\conf\screenshare 刚刚创建的文件夹。
  • 更改 中的一些属性应用程序.xml .设置此值:

    流类型=直播
    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/#
  • 在“视频源”字段中插入指向您的流的链接(当然,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>
    

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

    关于java - 如何实现网页应用的屏幕共享?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14755601/

    相关文章:

    apache-flex - ActionScript 3 : Socket, amf, NetConnection, rtmp... 越来越清楚

    java - 屏幕截图问题 - 不包括自己的应用程序。从屏幕截图

    java - 分布式缓存

    java - vlcj JPanel 绘制 mediaPlayerComponent

    java - 在 JFormattedTextField 中输入日期后,自定义掩码消失

    javascript - nodejs 中的 RTMP 实现是可能的吗?

    ffmpeg - 通过搜索流式传输 MKV

    java - 无法在同一网络中按名称访问 Docker 容器

    java - 如何搭建Jetty开发环境?

    java - 在面板中显示 ArrayList