内容简介: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大杂烩》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
实用Common Lisp编程
Peter Seibel / 田春 / 人民邮电出版社 / 2011-10 / 89.00元
由塞贝尔编著的《实用Common Lisp编程》是一本不同寻常的Common Lisp入门书。《实用Common Lisp编程》首先从作者的学习经过及语言历史出发,随后用21个章节讲述了各种基础知识,主要包括:REPL及Common Lisp的各种实现、S-表达式、函数与变量、标准宏与自定义宏、数字与字符以及字符串、集合与向量、列表处理、文件与文件I/O处理、类、FORMAT格式、符号与包,等等。......一起来看看 《实用Common Lisp编程》 这本书的介绍吧!