Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java和web套接字在web浏览器中显示RTSP实时流_Java_Video_Websocket_Rtsp - Fatal编程技术网

使用java和web套接字在web浏览器中显示RTSP实时流

使用java和web套接字在web浏览器中显示RTSP实时流,java,video,websocket,rtsp,Java,Video,Websocket,Rtsp,我想编写一个java程序,对来自Ip摄像头的RTSP实时流进行解码,并通过web套接字将其发送到HTML5Web客户端。 当我的电脑上有一个简单的mp4文件时,我可以这样做。我的代码如下所示: 爪哇 HTML WebSocket上的测试流 var wsUri=“ws://localhost:7070/serverWs/echo”; 函数init(){ websocket=新的websocket(wsUri); websocket.onmessage=函数(evt){ 读取文件(evt.data

我想编写一个java程序,对来自Ip摄像头的RTSP实时流进行解码,并通过web套接字将其发送到HTML5Web客户端。 当我的电脑上有一个简单的mp4文件时,我可以这样做。我的代码如下所示:

爪哇

HTML


WebSocket上的测试流
var wsUri=“ws://localhost:7070/serverWs/echo”;
函数init(){
websocket=新的websocket(wsUri);
websocket.onmessage=函数(evt){
读取文件(evt.data);
};
}
函数readFile(fileData){
var video=document.getElementById('area');
video.src=window.URL.createObjectURL(文件数据);
}
函数createObjectURL(文件){
if(window.webkitURL){
返回window.webkitURL.createObjectURL(文件);
}else if(window.URL&&window.URL.createObjectURL){
返回window.URL.createObjectURL(文件);
}否则{
返回null;
}
}
函数startVideo(){
var message=“startVideo”;
发送(消息);
}
addEventListener(“加载”,init,false);
客户端WebSocket回显

但是,当涉及实时RTSP流式URL时,我无法找到一种方法来解码流并通过WS发送,然后在我的网页中显示该流。

除非您真的想自己做,以达到教育目的或满足其他要求,您可能会发现围绕现有流媒体服务器构建服务更容易

这是因为视频流是一个相当专业的领域,有许多编解码器、容器、流协议等,您可能需要在它们之间进行转换,以支持不同的终端设备、浏览器等

此外,如果您希望提供良好的用户体验,您可能希望以多种比特率提供实时流,以便客户端可以根据其当前网络条件、屏幕大小等在它们之间切换

大多数流媒体服务器将支持将视频转码为不同的格式,并将多个比特率流媒体化,以实现自适应比特率流媒体

GStreamer()是一个开源的streamer,您可能会发现它可以满足您的需求——即使它不能满足您的需求,它也将是一个很好的参考实现


您可以在此处看到有关其RTSP支持的信息:

除非您真的想自己做这件事以达到教育目的或满足其他要求,否则您可能会发现围绕现有流媒体服务器构建服务更容易

这是因为视频流是一个相当专业的领域,有许多编解码器、容器、流协议等,您可能需要在它们之间进行转换,以支持不同的终端设备、浏览器等

此外,如果您希望提供良好的用户体验,您可能希望以多种比特率提供实时流,以便客户端可以根据其当前网络条件、屏幕大小等在它们之间切换

大多数流媒体服务器将支持将视频转码为不同的格式,并将多个比特率流媒体化,以实现自适应比特率流媒体

GStreamer()是一个开源的streamer,您可能会发现它可以满足您的需求——即使它不能满足您的需求,它也将是一个很好的参考实现


您可以在此处看到有关其RTSP支持的信息:

我无法回复第一条评论,但如果需要的话,答案将无法满足实时(相对于实时流)要求。评论建议会增加10-20秒以上的流延迟

有几个RTSP到服务器端到WebSocket到客户端的解决方案/选项/示例:

  • Web/HTML5正在从Flash(以及类似的插件/ActiveX)转向通过更直接的RTP/RTSP/RTMP(基于UDP)流实现更好的延迟。随着时间的推移,WebRTC可能成为替代解决方案。HLS/自适应比特率等将有10-20秒以上的延迟

  • 直播(音乐会/活动)一直在推动流媒体的发展(Azure/Facebook/Wowza/AWS提供商),通常20-40秒的延迟不是问题


我无法回复第一条评论,但如果这是我的愿望,那么答案将无法满足实时(相对于实时流)要求。评论建议会增加10-20秒以上的流延迟

有几个RTSP到服务器端到WebSocket到客户端的解决方案/选项/示例:

  • Web/HTML5正在从Flash(以及类似的插件/ActiveX)转向通过更直接的RTP/RTSP/RTMP(基于UDP)流实现更好的延迟。随着时间的推移,WebRTC可能成为替代解决方案。HLS/自适应比特率等将有10-20秒以上的延迟

  • 直播(音乐会/活动)一直在推动流媒体的发展(Azure/Facebook/Wowza/AWS提供商),通常20-40秒的延迟不是问题

@ServerEndpoint("/echo")
public class EchoEndPoint {

@OnMessage
public byte[] echo(String message) {
    File file = new File("/home/maher/devTools/video/testVideo.mp4");
    byte[] data = new byte[(int) file.length()];
    DataInputStream stream = null;
    try {
        stream = new DataInputStream(new FileInputStream(file));
    } catch (FileNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    if (stream != null) {
        try {
            stream.readFully(data);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            stream.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    return data;
    }
  }
<!DOCTYPE html>
<html>
<head>
<title>Test streaming over WebSockets</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width">
<script language="javascript" type="text/javascript">
    var wsUri = "ws://localhost:7070/serverWs/echo";
    function init() {
        websocket = new WebSocket(wsUri);
        websocket.onmessage = function (evt) {
            readFile(evt.data);
        };
    }
    function readFile(fileData) {
        var video = document.getElementById('area');
        video.src = window.URL.createObjectURL(fileData);
    }
    function createObjectURL(file) {
        if (window.webkitURL) {
            return window.webkitURL.createObjectURL(file);
        } else if (window.URL && window.URL.createObjectURL) {
            return window.URL.createObjectURL(file);
        } else {
            return null;
        }
    }
    function startVideo() {
        var message = "startVideo";
        websocket.send(message);
    }
    window.addEventListener("load", init, false);
</script>
</head>


<body>
<h2 style="text-align: center;">Client WebSocket Echo</h2>
<div style="text-align: center;">
<input onclick="startVideo()" value="Start video" type="button">
</div>
<div>
<video id='area' controls="controls" autoplay></video>
</div>

</body>
</html>