Commit 0d02bc22ba33afd8aeb5c3029e070af3f3315046

Authored by 王通
1 parent 11a60adb

1

src/main/java/cn/org/hentai/jtt1078/publisher/Channel.java
@@ -92,10 +92,6 @@ public class Channel @@ -92,10 +92,6 @@ public class Channel
92 } 92 }
93 } 93 }
94 94
95 - public void writeVideoRtp(byte[] h264) {  
96 -  
97 - }  
98 -  
99 public void broadcastVideo(long timeoffset, byte[] flvTag) 95 public void broadcastVideo(long timeoffset, byte[] flvTag)
100 { 96 {
101 for (Subscriber subscriber : subscribers) 97 for (Subscriber subscriber : subscribers)
@@ -150,20 +146,9 @@ public class Channel @@ -150,20 +146,9 @@ public class Channel
150 if (i == 0) continue; 146 if (i == 0) continue;
151 byte[] nalu = new byte[i]; 147 byte[] nalu = new byte[i];
152 buffer.sliceInto(nalu, i); 148 buffer.sliceInto(nalu, i);
153 - //System.out.println(nalu.length);  
154 - //System.out.println(toHex(nalu));  
155 return nalu; 149 return nalu;
156 } 150 }
157 } 151 }
158 return null; 152 return null;
159 } 153 }
160 -  
161 - public String toHex(byte[] bytes) {  
162 - StringBuilder sb = new StringBuilder();  
163 - for (byte b : bytes) {  
164 - sb.append(String.format("%02X ", b));  
165 - }  
166 -  
167 - return sb.toString();  
168 - }  
169 } 154 }
src/main/java/cn/org/hentai/jtt1078/server/Jtt1078Handler.java
1 package cn.org.hentai.jtt1078.server; 1 package cn.org.hentai.jtt1078.server;
2 2
  3 +import cn.org.hentai.jtt1078.entity.Media;
  4 +import cn.org.hentai.jtt1078.entity.MediaEncoding;
3 import cn.org.hentai.jtt1078.publisher.Channel; 5 import cn.org.hentai.jtt1078.publisher.Channel;
4 import cn.org.hentai.jtt1078.publisher.PublishManager; 6 import cn.org.hentai.jtt1078.publisher.PublishManager;
  7 +import cn.org.hentai.jtt1078.entity.Audio;
5 import cn.org.hentai.jtt1078.rtp.H264Packeter; 8 import cn.org.hentai.jtt1078.rtp.H264Packeter;
6 import cn.org.hentai.jtt1078.rtsp.RtspSessionManager; 9 import cn.org.hentai.jtt1078.rtsp.RtspSessionManager;
7 import cn.org.hentai.jtt1078.util.Packet; 10 import cn.org.hentai.jtt1078.util.Packet;
@@ -13,13 +16,15 @@ import io.netty.channel.socket.SocketChannel; @@ -13,13 +16,15 @@ import io.netty.channel.socket.SocketChannel;
13 import io.netty.channel.socket.nio.NioSocketChannel; 16 import io.netty.channel.socket.nio.NioSocketChannel;
14 import io.netty.handler.codec.rtsp.RtspDecoder; 17 import io.netty.handler.codec.rtsp.RtspDecoder;
15 import io.netty.handler.codec.rtsp.RtspEncoder; 18 import io.netty.handler.codec.rtsp.RtspEncoder;
  19 +import io.netty.util.Attribute;
16 import io.netty.util.AttributeKey; 20 import io.netty.util.AttributeKey;
17 import org.slf4j.Logger; 21 import org.slf4j.Logger;
18 import org.slf4j.LoggerFactory; 22 import org.slf4j.LoggerFactory;
19 -import io.netty.handler.timeout.IdleState;  
20 -import io.netty.handler.timeout.IdleStateEvent;  
21 23
22 import java.net.InetSocketAddress; 24 import java.net.InetSocketAddress;
  25 +import java.util.Iterator;
  26 +import io.netty.handler.timeout.IdleState;
  27 +import io.netty.handler.timeout.IdleStateEvent;
23 28
24 /** 29 /**
25 * Created by matrixy on 2019/4/9. 30 * Created by matrixy on 2019/4/9.
@@ -39,7 +44,8 @@ public class Jtt1078Handler extends SimpleChannelInboundHandler<Packet> @@ -39,7 +44,8 @@ public class Jtt1078Handler extends SimpleChannelInboundHandler<Packet>
39 int channel = packet.nextByte() & 0xff; 44 int channel = packet.nextByte() & 0xff;
40 String tag = sim + "-" + channel; 45 String tag = sim + "-" + channel;
41 46
42 - if (SessionManager.contains(nettyChannel, "tag") == false) { 47 + if (SessionManager.contains(nettyChannel, "tag") == false)
  48 + {
43 Channel chl = PublishManager.getInstance().open(tag); 49 Channel chl = PublishManager.getInstance().open(tag);
44 SessionManager.set(nettyChannel, "tag", tag); 50 SessionManager.set(nettyChannel, "tag", tag);
45 new Thread(new PushTask(tag)).start(); 51 new Thread(new PushTask(tag)).start();
@@ -68,7 +74,7 @@ public class Jtt1078Handler extends SimpleChannelInboundHandler<Packet> @@ -68,7 +74,7 @@ public class Jtt1078Handler extends SimpleChannelInboundHandler<Packet>
68 SessionManager.set(nettyChannel, "video-sequence", sequence); 74 SessionManager.set(nettyChannel, "video-sequence", sequence);
69 } 75 }
70 long timestamp = packet.seek(16).nextLong(); 76 long timestamp = packet.seek(16).nextLong();
71 - //PublishManager.getInstance().publishVideo(tag, sequence, timestamp, pt, packet.seek(lengthOffset + 2).nextBytes()); 77 + PublishManager.getInstance().publishVideo(tag, sequence, timestamp, pt, packet.seek(lengthOffset + 2).nextBytes());
72 if (RtspSessionManager.isRegistered(tag)) { 78 if (RtspSessionManager.isRegistered(tag)) {
73 io.netty.channel.Channel push = RtspSessionManager.getPush(tag); 79 io.netty.channel.Channel push = RtspSessionManager.getPush(tag);
74 H264Packeter packeter = (H264Packeter) push.attr(AttributeKey.valueOf(tag)).get(); 80 H264Packeter packeter = (H264Packeter) push.attr(AttributeKey.valueOf(tag)).get();
src/main/java/cn/org/hentai/jtt1078/server/Jtt1078MessageDecoder.java
@@ -23,45 +23,20 @@ public class Jtt1078MessageDecoder extends ByteToMessageDecoder @@ -23,45 +23,20 @@ public class Jtt1078MessageDecoder extends ByteToMessageDecoder
23 protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception 23 protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception
24 { 24 {
25 int length = in.readableBytes(); 25 int length = in.readableBytes();
26 - while (length > 30) {  
27 - in.markReaderIndex();  
28 - int frameHeader = in.readInt();  
29 - if (frameHeader == 0x30316364) {  
30 - in.skipBytes(11);  
31 - int dataType = (in.readByte() >> 4) & 0xFF, lengthOffset = 28;  
32 - // 透传数据类型:0100,没有后面的时间以及Last I Frame Interval和Last Frame Interval字段  
33 - if (dataType == 0x04) lengthOffset = 28 - 8 - 2 - 2;  
34 - else if (dataType == 0x03) lengthOffset = 28 - 4;  
35 - in.skipBytes(lengthOffset - 16);  
36 - int bodyLength = in.readShort() & 0xFFFFFFFF;  
37 - int packetLength = lengthOffset + bodyLength + 2;  
38 - //System.out.println(bodyLength);  
39 - if (length < packetLength) {  
40 - in.resetReaderIndex();  
41 - return;  
42 - }  
43 - byte[] data = new byte[packetLength];  
44 - in.resetReaderIndex();  
45 - in.readBytes(data);  
46 - Packet packet = Packet.create(data);  
47 - out.add(packet);  
48 -// System.out.println("start:" + (lengthOffset + 2));  
49 -// System.out.println(toHex(data));  
50 - } else {  
51 - in.resetReaderIndex();  
52 - in.readByte();  
53 - } 26 + for (int i = 0, k = (int)Math.ceil(length / 512f); i < k; i++)
  27 + {
  28 + int l = i < k - 1 ? 512 : length - (i * 512);
  29 + in.readBytes(block, 0, l);
54 30
55 - length = in.readableBytes();  
56 - }  
57 - } 31 + decoder.write(block, 0, l);
58 32
59 - public String toHex(byte[] bytes) {  
60 - StringBuilder sb = new StringBuilder();  
61 - for (byte b : bytes) {  
62 - sb.append(String.format("%02X ", b));  
63 - } 33 + while (true)
  34 + {
  35 + Packet p = decoder.decode();
  36 + if (p == null) break;
64 37
65 - return sb.toString(); 38 + out.add(p);
  39 + }
  40 + }
66 } 41 }
67 } 42 }
src/main/java/cn/org/hentai/jtt1078/server/RTSPHandler.java
@@ -8,7 +8,9 @@ import io.netty.channel.*; @@ -8,7 +8,9 @@ import io.netty.channel.*;
8 import io.netty.channel.nio.NioEventLoopGroup; 8 import io.netty.channel.nio.NioEventLoopGroup;
9 import io.netty.channel.socket.SocketChannel; 9 import io.netty.channel.socket.SocketChannel;
10 import io.netty.channel.socket.nio.NioSocketChannel; 10 import io.netty.channel.socket.nio.NioSocketChannel;
11 -import io.netty.handler.codec.http.*; 11 +import io.netty.handler.codec.http.DefaultHttpContent;
  12 +import io.netty.handler.codec.http.DefaultHttpResponse;
  13 +import io.netty.handler.codec.http.HttpMethod;
12 import io.netty.handler.codec.rtsp.*; 14 import io.netty.handler.codec.rtsp.*;
13 import io.netty.util.internal.StringUtil; 15 import io.netty.util.internal.StringUtil;
14 import org.slf4j.Logger; 16 import org.slf4j.Logger;
@@ -21,7 +23,7 @@ public class RTSPHandler extends ChannelInboundHandlerAdapter { @@ -21,7 +23,7 @@ public class RTSPHandler extends ChannelInboundHandlerAdapter {
21 23
22 private final static Logger log = LoggerFactory.getLogger(RTSPHandler.class); 24 private final static Logger log = LoggerFactory.getLogger(RTSPHandler.class);
23 25
24 - private String channelId = "138000099998-1"; 26 + private String channelId = "122223333444-1";
25 27
26 private HttpMethod currentMethod = RtspMethods.OPTIONS; 28 private HttpMethod currentMethod = RtspMethods.OPTIONS;
27 29