因公司项目需求,需要开发一个基于java的RTSP服务,支持RTP/UDP和RTP/TCP模式的VLC播放。本人在这方面也是小白一个,于是各种谷歌,百度查找资料学习RTSP/RTP相关的理论知识,理论知识了解的差不多了,就想找一些java的成熟案例。可以找了一圈后发现根本没有java相关的可用案例。好在有一篇C++相关的可以借鉴,再此特别感谢这位大牛博主,不光技术好,博文也写的特别好。非常适合对于初学RTSP的小白。传送地址:http://blog.csdn.net/weixin_42462202/article/details/98986535。经过1周的学习和摸索最后成功开发出一个基于Java的RTSP服务,实现了RTP/UDP/TCP的在线实时视频播放。本文不讲述理论相关的,理论相关的参考上面的博客地址,讲的不要太好。这里只上经过公司项目实战验证的干货。交流QQ群:592145870,
点击下载源码
不知道RTP包格式的请阅读本文开头的传送地址博客,打包有三种方式:单NALU打包、聚合打包、分片打包。常用的是单NALU打包和分片打包。客户端接收到正确协议格式的RTP数据包即可播放视频,RTP包发送有UDP模式和TCP模式之分,区别在于RTP/TCP模式多四个字节数据头。如图:
上几张图是RTP打包和TCP模式发送代码,TCP模式最后是通过netty的channel发送的。UPD模式很简单,只要知道客户端IP地址和端口即可用DatagramPacket发送。代码中的iosesson是用户会话管理的。开发测试阶段可以不用。打包好的RTP直接调用channel发送即可。
以上就是大致的步骤和核心代码,目前只实现了视频的播放和回访,后期还有音频的效果需要实现,因需要忙别的项目,音频的实现暂时还没研究,有兴趣的同学可以一起交流,最后放几张本地h264视频文件效果图:
因公司项目需求,需要开发一个基于java的RTSP服务,支持RTP/UDP和RTP/TCP模式的VLC播放。本人在这方面也是小白一个,于是各种谷歌,百度查找资料学习RTSP/RTP相关的理论知识,理论知识了解的差不多了,就想找一些java的成熟案例。可以找了一圈后发现根本没有java相关的可用案例。好在有一篇C++相关的可以借鉴,再此特别感谢这位大牛博主,不光技术好,博文也写的特别好。非常适合对于...
1.在HTML中实现VLC视频流播放和控制的(包括屏幕的放大缩小、播放的控制、声音大小的控制、图像控制等功能),本DEMO可以播放
RTSP
实时流(海康、大华等摄像机)、RSTP实时流等主流。。。请放心下载,在IE、360浏览器测试OK,
rtsp
.zip
2.
rtsp
转rtmp程序,从
rtsp
摄像机获取流,转换为rtmp push到
服务
器(官方资源)EasyRTMP-master.zip
3.将
rtsp
转码为flv格式用于h5播放(前端使用flvjs播放)源码.rar和
rtsp
-web-converter-master.zip
那么
rtsp
我们怎么处理呢?我们使用
java
将
rtsp
流拿到之后,进行
rtsp
解码,因为要考虑到延时性,所以我们要尽量拿到一秒的数据之后再进行推流处理。代码如下:
public void decodeWave(String token, String url) throws Ex..
rtsp
协议的格式与http协议的格式是一样的, 因此可以使用
netty
的http解析器来处理
rtsp
交互数据.
netty
中自带了一个
Rtsp
Decoder, 但是它几乎没做什么事情, 只是将
rtsp
消息解析成HttpRequest,HttpResonse, HttpContent.
因此, 最终还是需要开发者自己处理, 没有什么捷径. 因此本文只是说明
netty
的基本用法
基本使用方法
最近公司要我做一个跟摄像头有关的项目,要求实现网页直播的功能,并且前端不用浏览器插件(为了兼容更多的浏览器),摄像头是某世的,有提供
rtsp
地址。之前没接触过摄像头,网上找了很多资料,实现的方法也是各式各样,最终确定了一个比较接近需求且简单的方案。
先放出码云地址:https://gitee.com/lllyl2012/
rtsp
Demo
gith...
private static final String
RTSP
_VERSION = "
RTSP
/1.0";
private static final String CRLF = "\r\n";
public static void main(String[] args) throws Exception {
String serverAddress = "example.com";
int serverPort = 554;
String url = "
rtsp
://" + serverAddress + ":" + serverPort + "/test.mp4";
// Establish TCP connection with server
Socket
rtsp
Socket = new Socket(serverAddress, serverPort);
BufferedReader inputReader = new BufferedReader(new InputStreamReader(
rtsp
Socket.getInputStream()));
OutputStream outputStream =
rtsp
Socket.getOutputStream();
// Send
RTSP
OPTIONS request
String optionsRequest = "OPTIONS " + url + " " +
RTSP
_VERSION + CRLF +
"CSeq: 1" + CRLF +
"User-Agent: My
RTSP
Client" + CRLF +
CRLF;
outputStream.write(optionsRequest.getBytes());
System.out.println("OPTIONS request sent.");
// Read
RTSP
OPTIONS response
String optionsResponse = "";
String inputLine;
while ((inputLine = inputReader.readLine()) != null) {
optionsResponse += inputLine + "\n";
if (inputLine.equals(""))
break;
System.out.println("OPTIONS response received:\n" + optionsResponse);
// Send
RTSP
DESCRIBE request
String describeRequest = "DESCRIBE " + url + " " +
RTSP
_VERSION + CRLF +
"CSeq: 2" + CRLF +
"User-Agent: My
RTSP
Client" + CRLF +
"Accept: application/sdp" + CRLF +
CRLF;
outputStream.write(describeRequest.getBytes());
System.out.println("DESCRIBE request sent.");
// Read
RTSP
DESCRIBE response
String describeResponse = "";
while ((inputLine = inputReader.readLine()) != null) {
describeResponse += inputLine + "\n";
if (inputLine.equals(""))
break;
System.out.println("DESCRIBE response received:\n" + describeResponse);
// Close the
RTSP
socket
rtsp
Socket.close();
这个示例通过建立TCP连接与
RTSP
服务
器进行通信,发送
RTSP
OPTIONS和DESCRIBE请求,读取响应,并将其输出到控制台。您可以在此基础上构建更复杂的
RTSP
客户端。