原始问题
我撞墙了,我希望有人能帮助我。几周前我刚开始编写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页面上。
答案 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玩得很开心