FFmpeg解码RTSP流数据使用HTML+JSMPEG播放

本文介绍了如何利用FFmpeg解码RTSP流,并通过自建的WebSocket服务器,将流数据传输到HTML页面,利用JSMPEG进行播放。尽管存在视频马赛克的问题,但详细代码可在作者的Git仓库中获取。
摘要由CSDN通过智能技术生成

先说思路

网上基本都是node.js+websocket-relay.js作为中继器,其实现原理就是将RTSP数据推送到websocket-relay的接口,再通过websockclient推到websocketserver,根据这个原理我做了个类似的程序,但是不完美,视频会时不时出现马赛克,一直没能找到解决办法。

webcam.html

<!DOCTYPE html>
<html>
<head>
	<title>视频</title>
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width"/>
</head>
<body>
	<canvas id="video-canvas" width="480px" height="320px"></canvas>
	<script type="text/javascript" src="/js/jsmpeg.js"></script>
	<script type="text/javascript" src="/js/jquery-1.8.2.min.js"></script>
	<script type="text/javascript">
		debugger;
		var url = 'http://localhost:8080/webcam/stream';
		
		var param = {};
			param.requestType = 2;
			param.requestData = 'cam2';
			param.size = '480x320';
			param.streamType = 1
		$.ajax({
			type : 'get',
			url : url,
			dataType : 'text',
			data: param,
			beforeSend : function() {
			},
			complete : function() {
			},
			success : function(data, status) {
				result = data;
				debugger;
				var canvas = document.getElementById('video-canvas');
				var player = new JSMpeg.Player(data, {
					canvas : canvas
				});
			},
			error : function(err, err1, err2) {
				console.log(JSON.stringify(err) + '<br/>err1:'
						+ JSON.stringify(err1) + '<br/>err2:'
						+ JSON.stringify(err2));
			}
		});
	</script>

	
</body>
</html>

 主程序

package platform;

import java.io.UnsupportedEncodingException;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import platform.util.MediaUtil;

@SpringBootApplication
public class Application {
	public static void main(String[] args) throws Exception {
		SpringApplication.run(Application.class, args);
		sendRequest();
	}
	public static void sendRequest() throws UnsupportedEncodingException {
		 MediaUtil.sendWebSocket("rtsp://admin:12345@10.11.4.111:554/Streaming/Channels", "D:/aaa.mp1");
//		 MediaUtil.sendWebSocket("rtsp://admin:12345@10.11.4.111:554/Streaming/Channels", "http://192.168.93.129:8081/123456");
	}
}

web端访问接口 

package platform.controller;

import java.net.URI;
import java.util.Map;

import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.alibaba.fastjson.JSON;
import com.google.common.collect.Maps;

import lombok.Cleanup;
import platform.bean.RequestParam;
import platform.bean.ResultVO;
import platform.hikvision.HikvisionUtil;
import platform.properties.Path;
import platform.util.MediaUtil;
import platform.util.URLUtil;
import platform.websocket.WSClient;

@Controller
public class RelayController extends BaseController {

	public static Map<String, String> aliveMap = Maps.newHashMap();
	@Autowired
	private Path path;

	@PostMapping("/relay/push")
	public void pushStream(HttpServletRequest request, String code) {
		String url = path.getWs().concat("/").concat(code);
		try {

			WSClient wc = new WSClient(new URI(url));
			wc.connect();
			Thread.sleep(3 * 1000);
			@Cleanup
			ServletInputStream inputStream = null;
			byte[] rs = new byte[25];
			inputStream = request.getInputStream();
	
你可以通过以下步骤来实现JavaRTSPFFmpegHTML和Nginx的结合来实现视频实时播放的监控系统: 1. 首先,你需要使用Java来创建一个监控系统的后端服务。你可以使用Java的网络编程库来监听RTSP并将其解码。可以使用开源的库,例如JRTSP或者Xuggler来处理RTSP,并将其转换为可供播放的视频。 2. 接下来,你需要使用FFmpeg来处理视频FFmpeg是一个强大的多媒体处理工具,可以用于转码、解码、编码等操作。你可以使用FFmpeg解码RTSP,并将其转换为HTML5支持的视频格式,例如HLS(HTTP Live Streaming)或者MPEG-DASH(Dynamic Adaptive Streaming over HTTP)。 3. 在前端方面,你可以使用HTMLJavaScript来创建一个简单的视频播放器。你可以使用HTML5的<video>标签来嵌入视频,并使用JavaScript来控制视频的播放、暂停等操作。你可以使用一些开源的视频播放器库,例如video.js或者plyr来简化开发过程。 4. 最后,你可以使用Nginx作为反向代理服务器来提供视频的分发和缓存功能。Nginx可以将视频从后端服务器转发给前端浏览器,并且可以缓存视频文件以提高性能和可靠性。你可以配置Nginx来支持HLS或者MPEG-DASH协议,并且可以使用Nginx的HTTP模块来进行性能优化和安全加固。 综上所述,通过将JavaRTSPFFmpegHTML和Nginx结合起来,你可以实现一个监控视频的实时播放系统。这个系统可以从RTSP中提取视频数据,经过FFmpeg处理后,通过HTMLJavaScript在浏览器中进行播放,并且可以使用Nginx提供性能优化和缓存支持。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值