内容简介:RTMP(Real Time Messaging protocol)实时消息协议,是Adobe公司主导的半开放流媒体协议,被设计用于FlashPlayer与服务端的交互,比如直播、点播、聊天。RTMP在Web端需要Flash插件支持,在其他端需要模拟FlashPlayer,解析RTMP协议,进行推流拉流以
RTMP(Real Time Messaging protocol)实时消息协议,是Adobe公司主导的半开放流媒体协议,被设计用于FlashPlayer与服务端的交互,比如直播、点播、聊天。
RTMP在Web端需要Flash插件支持,在其他端需要模拟FlashPlayer,解析RTMP协议,进行推流拉流
RTMP协议URL解析
以 rtmp://rtmp.open.ys7.com:1935/openlive/f01018a141094b7fa138b9d0b856507b.hd
为例,一个RTMP协议的URL主要包括以下几个部分:
rtmp rtmp.open.ys7.com 1935 openlive f01018a141094b7fa138b9d0b856507b.hd
Java拉取RTMP流
在桌面端,Java的RTMP第三方库主要用 Red5
,它提供了搭建RTMP服务器、客户端推流、客户端拉流等功能。
注意: 如果服务端提供的流只有视频没有声音,那拉取到的流和下载的视频文件也将没有音轨
Java拉流示例
Maven依赖
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
以上所述就是小编给大家介绍的《RTMP大杂烩》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
逆向工程核心原理
[韩] 李承远 / 武传海 / 人民邮电出版社 / 2014-4-25 / 109.00元
本书十分详尽地介绍了代码逆向分析的核心原理。作者在Ahnlab 研究所工作多年,书中不仅包括其以此经验为基础亲自编写的大量代码,还包含了逆向工程研究人员必须了解的各种技术和技巧。彻底理解并切实掌握逆向工程这门技术,就能在众多IT 相关领域进行拓展运用,这本书就是通向逆向工程大门的捷径。 想成为逆向工程研究员的读者或正在从事逆向开发工作的开发人员一定会通过本书获得很大帮助。同时,想成为安全领域......一起来看看 《逆向工程核心原理》 这本书的介绍吧!