java编写 rtmp协议传输视频数据

功能结构:

java编写 rtmp协议传输视频数据_第1张图片

流程介绍:

直连的情况下:本地使用obs把mp4文件推流给red5流媒体服务器 使用rtmp协议 使用vlc从red5流媒体服务器拉流可以播放

代理情况:本地使用obs把mp4文件推流给代理服务器 代理服务器转发到red5流媒体服务器 代理服务器的转发就是我们需要实现的功能。

技术介绍:

  • 多线程编程
  • netty 不使用编解码器
  • scoket

逻辑介绍

本地测试 在代理服务器中开启端口监听 通过端口捕获到数据 解析数据 通过netty转发 到目标服务器red5流媒体服务器 只做简单介绍 里面有很多复杂处理

代码介绍

发送端逻辑 -发送请求

java编写 rtmp协议传输视频数据_第2张图片
上面三个 是netty的初始化 handler逻辑处理
java编写 rtmp协议传输视频数据_第3张图片
此处没有使用编解码器
java编写 rtmp协议传输视频数据_第4张图片
可以看到在通道注册成功以后并且链接建立后以后 对于数据发送没有做任何处理 就是生成一个自定义的消息对象 发送发送做解析

接收端逻辑-接收请求/返回响应数据

java编写 rtmp协议传输视频数据_第5张图片
接收端根据标识判断是connect还是active 不同逻辑稍微不同 最主要的逻辑就是 和目标服务器链接成功 监听有数据取出来
java编写 rtmp协议传输视频数据_第6张图片
通过channelread 方法取出目标服务器返回的数据
java编写 rtmp协议传输视频数据_第7张图片

发送逻辑-接收响应

当数据返回来判断书包是否发送完成 并作对应的操作
java编写 rtmp协议传输视频数据_第8张图片
至此代理服务器转发rtmp协议数据完成 本地测试通过 通过抓包可以看见完成的交互过程
java编写 rtmp协议传输视频数据_第9张图片

因为代码比较多 所以只是把重点部分贴了出来 ,想说的是 一般rtmp协议都是用来做直播 使用nginx做处理,使用netty是可以转发rtmp协议数据 不使用编解码器 使用socket传输就可以了。

重要的事情说三遍 netty可以传输rtmp netty可以传输rtmp netty可以传输rtmp

如有错误 请大家指出!!!!

转载请指明出处

你可能感兴趣的:(网络编程,java,netty,socket)