0

原始问题

我碰壁了,我希望这里的人能够帮助我。几周前我刚开始编写 Grails,这是我的第一个项目,所以如果我可以要求所有回复都附有示例,我将不胜感激。

我正在尝试开发一个网页,该网页连接到我公司的一个专有相机引擎(用 c++ 编写)。选择相机后,此“SocketSerivce”应与引擎建立 TCP 连接并请求流(mjpeg/h264/etc)。

我的问题是,我已经能够成功地建立到引擎的套接字连接并请求流,但我不知道如何处理它,我尝试过的一切都失败了。我想要的是<div id="VideoStreamContainer"></div>在我的 GSP 页面上播放视频流(mjpeg/h264/etc)。

有谁知道做到这一点的最佳方法?

SocketService.groovy:

def static getCameraStream(def ip, def port, def cam){
    final Socket sock = new Socket(ip, port)
    OutputStream os = sock.getOutputStream()
    dataips = new DataInputStream(sock.getInputStream());
    //s.setSoTimeout(3000)
    nThread = new Thread(){
        public void run(){
            os << "Get /specialCommandtoRequestCameraStream"
            os.flush()
            while((readed = dataips.readLine()) != null){
                println("read:  " + readed)
            }
        }
    }.start();

如果我没有为您提供足够的信息来解决我的问题,我很乐意回答任何人的任何其他问题。在此先感谢您的帮助。

更新 1

从我现在正在阅读的文档中,我意识到我在最初的问题中遗漏了一些重要的东西。我想在 div 标签(或其他一些 html 类型标签)中流式传输视频的原因是因为我想避免使用“Flash”播放器。我正在处理的这个网页,我希望在所有支持 java 的设备上都能正常运行。但是这些相同的设备中的大多数都不支持/运行 Flash。这就是我寻找非 Flash 播放器解决方案的原因。我很抱歉没有早点包括这个。

更新 2 2013 年 8 月 1 日晚上 9:38 @aduchate

您(或任何人)能否更好地解释如何使用此代码将其与 GSP 页面联系起来?例如,有了这个,我现在可以让一个 html<video>标签从控制器接收视频流吗?或者控制器是否有能力在不使用<video>标签的情况下在网页上呈现视频?

如果我之前没有详细说明这一点,那么我想做的是从 C++ 引擎中获取可以显示在任何网页上的视频流(mjpeg/h264/etc)。“视频引擎”->“Grails”->“Html (GSP) 网页”。我正在使用 grails 建立和维护套接字连接以及我通过套接字接收的视频流,我试图在 GSP 页面上推送/显示。这是该项目的最终目标。

更新 3 2013 年 8 月 2 日上午 8:50

只是想说我从昨晚开始解决了我的错误问题。我的问题仍然是从套接字获取视频流以显示在 GSP 页面上。

4

1 回答 1

0

假设您只是希望将从套接字读取的流中继为 http 响应的内容,您必须在控制器中编写以下代码:

import org.apache.commons.io.IOUtils

def getCameraStream() {
  Socket sock = new Socket(params.ip, params.port as Integer)
  sock.withStreams { input, output ->
    output << "Get /specialCommandtoRequestCameraStream"
    output.flush()
    response.setContentType('video/mp4')
    IOUtils.copy(input,response.outputStream)
  }
  sock.close()
}

此代码未经测试,但应为您指明正确的方向。

玩得开心 Grails

于 2013-08-01T21:00:10.980 回答