RTMP大杂烩

栏目: 服务器 · 发布时间: 5年前

内容简介: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-clientred5-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

文章首发: https://baijifeilong.github.io


以上所述就是小编给大家介绍的《RTMP大杂烩》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

实用Common Lisp编程

实用Common Lisp编程

Peter Seibel / 田春 / 人民邮电出版社 / 2011-10 / 89.00元

由塞贝尔编著的《实用Common Lisp编程》是一本不同寻常的Common Lisp入门书。《实用Common Lisp编程》首先从作者的学习经过及语言历史出发,随后用21个章节讲述了各种基础知识,主要包括:REPL及Common Lisp的各种实现、S-表达式、函数与变量、标准宏与自定义宏、数字与字符以及字符串、集合与向量、列表处理、文件与文件I/O处理、类、FORMAT格式、符号与包,等等。......一起来看看 《实用Common Lisp编程》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具