RTMP(Real Time Messaging protocol)实时消息协议,是Adobe公司主导的半开放流媒体协议,被设计用于FlashPlayer与服务端的交互,比如直播、点播、聊天。
RTMP在Web端需要Flash插件支持,在其他端需要模拟FlashPlayer,解析RTMP协议,进行推流拉流
以rtmp://rtmp.open.ys7.com:1935/openlive/f01018a141094b7fa138b9d0b856507b.hd
为例,一个RTMP协议的URL主要包括以下几个部分:
rtmp
协议(protocol)rtmp.open.ys7.com
服务器地址(server)1935
服务器端口(port)openlive
RTMP应用名(application)f01018a141094b7fa138b9d0b856507b.hd
流名称(stream)在桌面端,Java的RTMP第三方库主要用Red5
,它提供了搭建RTMP服务器、客户端推流、客户端拉流等功能。
注意: 如果服务端提供的流只有视频没有声音,那拉取到的流和下载的视频文件也将没有音轨
Java拉流示例
RTMP拉流主要依赖red5-client
和red5-server
。之所以有red5-server
,是因为它提供了FLV解析库,这里用它将拉取的流保存为本地flv
文件
<dependency>
<groupId>org.red5</groupId>
<artifactId>red5-client</artifactId>
<version>1.0.9-RELEASE</version>
</dependency>
<dependency>
<groupId>org.red5</groupId>
<artifactId>red5-server</artifactId>
<version>1.0.9-RELEASE</version>
</dependency>
package bj;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
import ch.qos.logback.core.ConsoleAppender;
import ch.qos.logback.core.Context;
import io.vavr.control.Try;
import lombok.extern.slf4j.Slf4j;
import org.apache.mina.core.buffer.IoBuffer;
import org.junit.Test;
import org.red5.client.net.rtmp.RTMPClient;
import org.red5.io.ITag;
import org.red5.io.ITagWriter;
import org.red5.io.flv.impl.Tag;
import org.red5.server.api.stream.IStreamPacket;
import org.red5.server.net.rtmp.event.AudioData;
import org.red5.server.net.rtmp.event.IRTMPEvent;
import org.red5.server.net.rtmp.event.VideoData;
import org.red5.server.service.flv.impl.FLVService;
import org.red5.server.stream.IStreamData;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
/**
* Created by BaiJiFeiLong@gmail.com at 2018/12/1 下午5:23
*/
@Slf4j
public class RtmpTest {
// 下载结束标志
private boolean done = false;
// 下载结束消息
private final Object doneMessage = new Object();
/**
* 拉取远程RTMP流, 并写入本地文件
*
* @throws IOException .
* @throws InterruptedException .
*/
@SuppressWarnings("unchecked")
@Test
public void testAlpha() throws IOException, InterruptedException {
// Logback配置日志级别为INFO
((Logger) (LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME))).setLevel(Level.DEBUG);
// 自定义控制台日志格式
((ConsoleAppender) ((Logger) (LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME))).getAppender("console")).setEncoder(new PatternLayoutEncoder() {
{
setContext((Context) LoggerFactory.getILoggerFactory());
setPattern("[%date] %highlight([%level]) [%logger{10} %file:%line] [%thread] %msg%n");
start();
}
});
/// 配置流信息 URL: rtmp://rtmp.open.ys7.com/openlive/f01018a141094b7fa138b9d0b856507b.hd
// 服务器地址
String server = "rtmp.open.ys7.com";
// 服务器RTMP拉流端口
int port = 1935;
// 服务器RTMP应用名称
String application = "openlive";
// 服务器RTMP流名称
String name = "f01018a141094b7fa138b9d0b856507b.hd";
// 本机下载视频的位置
String localName = "hello.flv";
/// 使用Red5提供的FLVService下载流媒体
File file = new File(localName);
FLVService flvService = new FLVService();
flvService.setGenerateMetadata(true);
ITagWriter writer = flvService.getStreamableFile(file).getWriter();
// 创建RTMP客户端
RTMPClient rtmpClient = new RTMPClient();
// 设置客户端连接关闭的回调
rtmpClient.setConnectionClosedHandler(() -> {
log.info("[ACTION] onConnectionClosed");
if (!done) {
done = true; // 防止多次进入回调报异常
writer.close(); // 关闭本地文件的Writer,将缓存刷入文件,否则此文件始终是个空文件
// 通知主线程下载结束
synchronized (doneMessage) {
doneMessage.notify();
}
}
});
// 监听流事件
rtmpClient.setStreamEventDispatcher(event -> {
log.info("[EVENT] {} - {}", event.getType(), event);
// 只关注视频数据、音频数据事件
if (event instanceof VideoData || event instanceof AudioData) {
// 此处只下载5秒的视频,超出5秒则断开连接
if (((IStreamPacket) event).getTimestamp() > 5000) {
rtmpClient.getConnection().close();
return;
}
// 创建流片段
ITag tag = new Tag();
// 流片段设置数据类型
tag.setDataType(((IRTMPEvent) event).getDataType());
tag.setTimestamp(((IStreamPacket) event).getTimestamp());
// 获取流缓冲
IoBuffer ioBuffer = ((IStreamData) event).getData().asReadOnlyBuffer();
// 流片段设置数据体
tag.setBody(ioBuffer);
// 流片段设置数据体的大小
tag.setBodySize(ioBuffer.limit());
// 将流片段写入文件
Try.run(() -> writer.writeTag(tag)).get();
}
});
// RTMP客户端连接服务器
rtmpClient.connect(server, port, application, connMsg -> {
log.info("[CONNECTION] [RECEIVED] {}", connMsg);
// 连接成功后创建流频道
rtmpClient.createStream(msg -> {
log.info("[STREAM] [RECEIVED] {}", msg);
Number streamId = (Number) msg.getResult();
// 以创建的流频道播放指定名称的流媒体(拉流)
rtmpClient.play(streamId, name, 0, -2);
});
});
// 等待下载任务结束
synchronized (doneMessage) {
doneMessage.wait();
}
}
}
[2018-12-04 16:54:36,944] [INFO] [o.r.c.n.r.BaseRTMPClientHandler BaseRTMPClientHandler.java:281] [main] rtmp://rtmp.open.ys7.com:1935/openlive
[2018-12-04 16:54:40,227] [INFO] [o.r.c.n.r.BaseRTMPClientHandler BaseRTMPClientHandler.java:356] [NioProcessor-2] ChunkSize is not fully implemented: ChunkSize: 8192
[2018-12-04 16:54:40,227] [INFO] [b.RtmpTest RtmpTest.java:127] [NioProcessor-2] [CONNECTION] [RECEIVED] Service: null Method: connect No params
[2018-12-04 16:54:40,340] [INFO] [b.RtmpTest RtmpTest.java:131] [NioProcessor-2] [STREAM] [RECEIVED] Service: null Method: createStream No params
[2018-12-04 16:54:40,496] [INFO] [o.r.s.n.r.c.RTMPProtocolDecoder RTMPProtocolDecoder.java:947] [NioProcessor-2] Stream send: |RtmpSampleAccess
[2018-12-04 16:54:40,502] [INFO] [o.r.c.n.r.BaseRTMPClientHandler BaseRTMPClientHandler.java:826] [NioProcessor-2] No service provider / method for: onStatus; to handle calls like onBWCheck, add a service provider
[2018-12-04 16:54:40,504] [INFO] [o.r.c.n.r.BaseRTMPClientHandler BaseRTMPClientHandler.java:826] [NioProcessor-2] No service provider / method for: onStatus; to handle calls like onBWCheck, add a service provider
[2018-12-04 16:54:40,505] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Notify action: |RtmpSampleAccess
[2018-12-04 16:54:40,509] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 0 length: 36
[2018-12-04 16:54:40,649] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 0 length: 122102
[2018-12-04 16:54:40,654] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 40 length: 7147
[2018-12-04 16:54:40,656] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 80 length: 7354
[2018-12-04 16:54:40,674] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 120 length: 7363
[2018-12-04 16:54:40,681] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 160 length: 7159
[2018-12-04 16:54:40,683] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 200 length: 7240
[2018-12-04 16:54:40,685] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 240 length: 7571
[2018-12-04 16:54:40,687] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 280 length: 7323
[2018-12-04 16:54:40,690] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 320 length: 7323
[2018-12-04 16:54:40,693] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 360 length: 7415
[2018-12-04 16:54:40,695] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 400 length: 7202
[2018-12-04 16:54:40,697] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 440 length: 7045
[2018-12-04 16:54:40,698] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 480 length: 7146
[2018-12-04 16:54:40,702] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 520 length: 7209
[2018-12-04 16:54:40,704] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 560 length: 7090
[2018-12-04 16:54:40,714] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 600 length: 7058
[2018-12-04 16:54:40,716] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 640 length: 7400
[2018-12-04 16:54:40,718] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 680 length: 6850
[2018-12-04 16:54:40,729] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 720 length: 7057
[2018-12-04 16:54:40,730] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 760 length: 7142
[2018-12-04 16:54:40,731] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 800 length: 7251
[2018-12-04 16:54:40,732] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 840 length: 7379
[2018-12-04 16:54:40,734] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 880 length: 7312
[2018-12-04 16:54:40,736] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 920 length: 7546
[2018-12-04 16:54:40,738] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 960 length: 7214
[2018-12-04 16:54:40,739] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 999 length: 7682
[2018-12-04 16:54:40,740] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 1040 length: 7360
[2018-12-04 16:54:40,744] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 1120 length: 7276
[2018-12-04 16:54:40,746] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 1159 length: 7454
[2018-12-04 16:54:40,747] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 1199 length: 6947
[2018-12-04 16:54:40,748] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 1239 length: 7046
[2018-12-04 16:54:40,750] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 1279 length: 7034
[2018-12-04 16:54:40,755] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 1319 length: 6824
[2018-12-04 16:54:40,756] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 1359 length: 6623
[2018-12-04 16:54:40,758] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 1399 length: 6329
[2018-12-04 16:54:40,760] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 1439 length: 6850
[2018-12-04 16:54:40,761] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 1479 length: 6560
[2018-12-04 16:54:40,766] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 1519 length: 6467
[2018-12-04 16:54:40,767] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 1559 length: 6638
[2018-12-04 16:54:40,769] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 1599 length: 6581
[2018-12-04 16:54:40,772] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 1639 length: 6842
[2018-12-04 16:54:40,774] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 1679 length: 6535
[2018-12-04 16:54:40,776] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 1719 length: 6493
[2018-12-04 16:54:40,778] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 1759 length: 6064
[2018-12-04 16:54:40,779] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 1799 length: 6362
[2018-12-04 16:54:40,780] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 1839 length: 6250
[2018-12-04 16:54:40,783] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 1879 length: 6393
[2018-12-04 16:54:40,784] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 1919 length: 6424
[2018-12-04 16:54:40,786] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 1959 length: 6348
[2018-12-04 16:54:40,787] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 1999 length: 6216
[2018-12-04 16:54:40,789] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 2039 length: 6069
[2018-12-04 16:54:40,822] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 2079 length: 6678
[2018-12-04 16:54:40,824] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 2119 length: 6532
[2018-12-04 16:54:40,825] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 2159 length: 6052
[2018-12-04 16:54:40,826] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 2199 length: 6523
[2018-12-04 16:54:40,830] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 2239 length: 6249
[2018-12-04 16:54:40,831] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 2278 length: 6467
[2018-12-04 16:54:40,845] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 2319 length: 6382
[2018-12-04 16:54:40,846] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 2358 length: 6846
[2018-12-04 16:54:40,847] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 2399 length: 6456
[2018-12-04 16:54:40,848] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 2438 length: 6697
[2018-12-04 16:54:40,850] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 2478 length: 6218
[2018-12-04 16:54:40,852] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 2518 length: 6625
[2018-12-04 16:54:40,854] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 2558 length: 6366
[2018-12-04 16:54:40,855] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 2598 length: 6334
[2018-12-04 16:54:40,858] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 2638 length: 6499
[2018-12-04 16:54:40,861] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 2678 length: 6285
[2018-12-04 16:54:40,862] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 2719 length: 6329
[2018-12-04 16:54:40,865] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 2758 length: 6273
[2018-12-04 16:54:40,866] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 2798 length: 6542
[2018-12-04 16:54:40,867] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 2838 length: 6452
[2018-12-04 16:54:40,868] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 2878 length: 6577
[2018-12-04 16:54:40,870] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 2918 length: 6420
[2018-12-04 16:54:40,871] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 2958 length: 6325
[2018-12-04 16:54:40,872] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 2998 length: 6582
[2018-12-04 16:54:40,874] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 3038 length: 6789
[2018-12-04 16:54:40,875] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 3078 length: 6437
[2018-12-04 16:54:40,877] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 3118 length: 6443
[2018-12-04 16:54:40,879] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 3158 length: 8333
[2018-12-04 16:54:40,880] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 3198 length: 6578
[2018-12-04 16:54:40,902] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 3238 length: 7680
[2018-12-04 16:54:40,931] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 3278 length: 7255
[2018-12-04 16:54:40,985] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 3318 length: 7481
[2018-12-04 16:54:41,046] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 3358 length: 7245
[2018-12-04 16:54:41,048] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 3398 length: 7385
[2018-12-04 16:54:41,116] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 3438 length: 7500
[2018-12-04 16:54:41,147] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 3478 length: 6416
[2018-12-04 16:54:41,187] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 3518 length: 8056
[2018-12-04 16:54:41,216] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 3558 length: 6473
[2018-12-04 16:54:41,247] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 3598 length: 7742
[2018-12-04 16:54:41,287] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 3638 length: 7459
[2018-12-04 16:54:41,337] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 3678 length: 7342
[2018-12-04 16:54:41,368] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 3717 length: 6661
[2018-12-04 16:54:41,405] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 3757 length: 7555
[2018-12-04 16:54:41,466] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 3797 length: 7333
[2018-12-04 16:54:41,523] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 3837 length: 7202
[2018-12-04 16:54:41,589] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 3877 length: 7147
[2018-12-04 16:54:41,594] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 3917 length: 7286
[2018-12-04 16:54:41,651] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 3957 length: 6585
[2018-12-04 16:54:41,857] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 3998 length: 118350
[2018-12-04 16:54:41,861] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 4037 length: 7388
[2018-12-04 16:54:41,863] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 4077 length: 7185
[2018-12-04 16:54:41,885] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 4117 length: 7647
[2018-12-04 16:54:41,886] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 4157 length: 7511
[2018-12-04 16:54:41,890] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 4197 length: 7155
[2018-12-04 16:54:41,916] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 4237 length: 7523
[2018-12-04 16:54:41,946] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 4277 length: 7472
[2018-12-04 16:54:41,983] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 4317 length: 7440
[2018-12-04 16:54:42,045] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 4357 length: 7253
[2018-12-04 16:54:42,080] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 4397 length: 7317
[2018-12-04 16:54:42,104] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 4437 length: 6918
[2018-12-04 16:54:42,152] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 4477 length: 7340
[2018-12-04 16:54:42,184] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 4517 length: 6890
[2018-12-04 16:54:42,215] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 4557 length: 7553
[2018-12-04 16:54:42,245] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 4597 length: 7079
[2018-12-04 16:54:42,281] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 4637 length: 6584
[2018-12-04 16:54:42,313] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 4677 length: 6819
[2018-12-04 16:54:42,379] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 4717 length: 6918
[2018-12-04 16:54:42,406] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 4757 length: 6717
[2018-12-04 16:54:42,497] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 4797 length: 6544
[2018-12-04 16:54:42,528] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 4837 length: 6917
[2018-12-04 16:54:42,558] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 4877 length: 6905
[2018-12-04 16:54:42,590] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 4917 length: 6465
[2018-12-04 16:54:42,621] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 4957 length: 6916
[2018-12-04 16:54:42,653] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 4997 length: 6912
[2018-12-04 16:54:42,684] [INFO] [b.RtmpTest RtmpTest.java:95] [NioProcessor-2] [EVENT] STREAM_DATA - Video - ts: 5037 length: 6656
[2018-12-04 16:54:42,700] [INFO] [b.RtmpTest RtmpTest.java:82] [Thread-2] [ACTION] onConnectionClosed