在GSP页面上播放服务中的视频流

时间:2013-07-31 14:46:01

标签: java sockets grails groovy gsp

原始问题

我撞墙了,我希望有人能帮助我。几周前我刚开始编写Grails编程,这是我的第一个项目,所以,如果我可以要求所有回复都是示例,我将非常感激。

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

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

有谁知道最好的方法吗?

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 8/1/2013 9:38 PM @aduchate

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

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

更新3 8/2/2013 8:50 AM

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

1 个答案:

答案 0 :(得分: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玩得很开心