Skip to content

Commit

Permalink
add Logger
Browse files Browse the repository at this point in the history
  • Loading branch information
shogo4405 committed Nov 26, 2016
1 parent 1bfabe9 commit ffd5821
Show file tree
Hide file tree
Showing 13 changed files with 301 additions and 27 deletions.
2 changes: 1 addition & 1 deletion app/src/main/java/com/haishinkit/amf/AMF0Serializer.java
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public AMF0Serializer putMap(final Map<String, Object> value) {
for (Map.Entry<String, Object> entry: value.entrySet()) {
putString(entry.getKey(), true).putObject(entry.getValue());
}
putString("", false);
putString("", true);
buffer.put(AMF0Marker.OBJECTEND.valueOf());
return this;
}
Expand Down
10 changes: 9 additions & 1 deletion app/src/main/java/com/haishinkit/net/Socket.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package com.haishinkit.net;

import android.util.Log;
import com.haishinkit.util.Log;

import org.apache.commons.lang3.builder.ToStringBuilder;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
Expand Down Expand Up @@ -72,6 +75,7 @@ private void doOutput() {
while (socket != null && socket.isConnected()) {
for (ByteBuffer buffer : outputQueue) {
try {
buffer.flip();
outputStream.write(buffer.array());
outputStream.flush();
outputQueue.remove(buffer);
Expand Down Expand Up @@ -105,6 +109,10 @@ public void run() {
Log.v(getClass().getName(), e.toString());
}
}

public String toString() {
return ToStringBuilder.reflectionToString(this);
}
}


34 changes: 29 additions & 5 deletions app/src/main/java/com/haishinkit/rtmp/RTMPChunk.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@ public enum RTMPChunk {
TWO((byte) 2),
THREE((byte) 3);

public static final short CONTROL = 0x02;
public static final short COMMAND = 0x03;
public static final short AUDIO = 0x04;
public static final short VIDEO = 0x05;
public static final int DEFAULT_SIZE = 128;

private final byte value;
Expand All @@ -31,11 +35,14 @@ public List<ByteBuffer> encode(RTMPSocket socket, RTMPMessage message) {
throw new IllegalArgumentException();
}

List<ByteBuffer> list = new ArrayList<ByteBuffer>();
ByteBuffer payload = message.encode(socket);
payload.flip();

List<ByteBuffer> list = new ArrayList<ByteBuffer>();
int length = payload.limit();
int timestamp = message.getTimestamp();
ByteBuffer buffer = ByteBuffer.allocate(length(message.getChunkStreamID()) + length);
int chunkSize = socket.getChunkSizeC();
ByteBuffer buffer = ByteBuffer.allocate(length(message.getChunkStreamID()) + (length < chunkSize ? length : chunkSize));
message.setLength(length);

buffer.put(header(message.getChunkStreamID()));
Expand All @@ -57,9 +64,26 @@ public List<ByteBuffer> encode(RTMPSocket socket, RTMPMessage message) {
break;
}

payload.flip();
buffer.put(payload);
buffer.flip();
if (length < chunkSize) {
buffer.put(payload.array(), 0, length);
buffer.flip();
list.add(buffer);
return list;
}

int mod = length % chunkSize;
byte[] three = RTMPChunk.THREE.header(message.getChunkStreamID());
buffer.put(payload.array(), 0, chunkSize);
list.add(buffer);
for (int i = 1; i < (length - mod) / chunkSize; ++i) {
buffer = ByteBuffer.allocate(three.length + chunkSize);
buffer.put(three);
buffer.put(payload.array(), chunkSize * i, chunkSize);
list.add(buffer);
}
buffer = ByteBuffer.allocate(three.length + mod);
buffer.put(three);
buffer.put(payload.array(), length - mod, mod);
list.add(buffer);

return list;
Expand Down
19 changes: 11 additions & 8 deletions app/src/main/java/com/haishinkit/rtmp/RTMPConnection.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package com.haishinkit.rtmp;

import android.util.Log;

import java.net.URI;
import java.nio.ByteBuffer;
import java.util.ArrayList;
Expand All @@ -11,6 +9,7 @@

import com.haishinkit.rtmp.message.RTMPCommandMessage;
import com.haishinkit.rtmp.message.RTMPMessage;
import com.haishinkit.util.Log;

public class RTMPConnection {
public static final int DEFAULT_PORT = 1935;
Expand Down Expand Up @@ -126,12 +125,13 @@ public void setFlashVer(String flashVer) {
}

public void connect(final String command, Object... arguments) {
if (isConnected()) {
uri = URI.create(command);
if (isConnected() || !uri.getScheme().equals("rtmp")) {
return;
}
uri = URI.create(command);
int port = uri.getPort();
this.arguments = arguments;
socket.connect(command, 1935);
socket.connect(uri.getHost(), port == -1 ? RTMPConnection.DEFAULT_PORT : port);
}

public void close() {
Expand All @@ -142,13 +142,14 @@ public void close() {
}

void listen(ByteBuffer buffer) {
Log.e(getClass().getName(), buffer.toString());

}

RTMPMessage createConnectionMessage() {
String[] paths = uri.getPath().split("/", 0);
RTMPCommandMessage message = new RTMPCommandMessage(RTMPObjectEncoding.AMF0);
Map<String, Object> commandObject = new HashMap<String, Object>();
commandObject.put("app", "");
commandObject.put("app", paths[1]);
commandObject.put("flashVer", flashVer);
commandObject.put("swfUrl", swfUrl);
commandObject.put("tcUrl", uri.toString());
Expand All @@ -159,8 +160,10 @@ RTMPMessage createConnectionMessage() {
commandObject.put("videoFunction", VideoFunction.CLIENT_SEEK.valueOf());
commandObject.put("pageUrl", pageUrl);
commandObject.put("objectEncoding", objectEncoding.valueOf());
message.setChunkStreamID(RTMPChunk.COMMAND);
message.setStreamID(0);
message.setCommandName("connect");
message.setTransactionID(transactionID++);
message.setTransactionID(++transactionID);
message.setCommandObject(commandObject);
if (arguments != null) {
List<Object> args = new ArrayList<Object>(arguments.length);
Expand Down
6 changes: 6 additions & 0 deletions app/src/main/java/com/haishinkit/rtmp/RTMPHandshake.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.haishinkit.rtmp;

import org.apache.commons.lang3.builder.ToStringBuilder;

import java.nio.ByteBuffer;
import java.util.Random;

Expand Down Expand Up @@ -66,4 +68,8 @@ public void clear() {
C2Packet = null;
S2Packet = null;
}

public String toString() {
return ToStringBuilder.reflectionToString(this);
}
}
24 changes: 16 additions & 8 deletions app/src/main/java/com/haishinkit/rtmp/RTMPSocket.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package com.haishinkit.rtmp;

import android.util.Log;

import java.nio.ByteBuffer;
import com.haishinkit.net.Socket;
import com.haishinkit.util.Log;
import com.haishinkit.rtmp.message.RTMPMessage;

import org.apache.commons.lang3.builder.ToStringBuilder;

public final class RTMPSocket extends Socket {
enum ReadyState {
Uninitialized,
Expand Down Expand Up @@ -38,24 +39,26 @@ public void setChunkSizeC(int chunkSizeC) {
this.chunkSizeC = chunkSizeC;
}

public void doOutput(RTMPMessage message) {

public void doOutput(RTMPChunk chunk, RTMPMessage message) {
for (ByteBuffer buffer : chunk.encode(this, message)) {
doOutput(buffer);
}
}

@Override
protected void onConnect() {
Log.v(getClass().getName(), "onConnect");
Log.v(getClass().getName() + "#onConnect", "");
handshake.clear();
readyState = ReadyState.VersionSent;
doOutput(handshake.getC0C1Packet());
}

@Override
protected void listen(ByteBuffer buffer) {
Log.v(getClass().getName(), "readyState:" + readyState + ":" + buffer.toString());
Log.v(getClass().getName() + "#listen", "readyState:" + readyState + ":" + buffer.toString());
switch (readyState) {
case VersionSent:
if (buffer.limit() <= RTMPHandshake.SIGNAL_SIZE + 1) {
if (buffer.limit() < RTMPHandshake.SIGNAL_SIZE + 1) {
break;
}
handshake.setS0S1Packet(buffer);
Expand All @@ -67,12 +70,13 @@ protected void listen(ByteBuffer buffer) {
}
break;
case AckSent:
if (buffer.limit() <= RTMPHandshake.SIGNAL_SIZE) {
if (buffer.limit() < RTMPHandshake.SIGNAL_SIZE) {
break;
}
handshake.setS2Packet(buffer);
buffer.position(RTMPHandshake.SIGNAL_SIZE);
readyState = ReadyState.HandshakeDone;
doOutput(RTMPChunk.ZERO, connection.createConnectionMessage());
break;
case HandshakeDone:
connection.listen(buffer);
Expand All @@ -81,4 +85,8 @@ protected void listen(ByteBuffer buffer) {
break;
}
}

public String toString() {
return ToStringBuilder.reflectionToString(this);
}
}
49 changes: 49 additions & 0 deletions app/src/main/java/com/haishinkit/util/AndroidLogAdapter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package com.haishinkit.util;

import android.util.Log;

public final class AndroidLogAdapter implements ILogAdapter {
public int v(String tag, String msg) {
return Log.v(tag, msg);
}

public int v(String tag, String msg, Throwable tr) {
return Log.v(tag, msg, tr);
}

public int d(String tag, String msg) {
return Log.d(tag, msg);
}

public int d(String tag, String msg, Throwable tr) {
return Log.d(tag, msg, tr);
}

public int i(String tag, String msg) {
return Log.i(tag, msg);
}

public int i(String tag, String msg, Throwable tr) {
return Log.i(tag, msg, tr);
}

public int w(String tag, String msg) {
return Log.w(tag, msg);
}

public int w(String tag, String msg, Throwable tr) {
return Log.w(tag, msg, tr);
}

public int w(String tag, Throwable tr) {
return Log.w(tag, tr);
}

public int e(String tag, String msg) {
return Log.e(tag, msg);
}

public int e(String tag, String msg, Throwable tr) {
return Log.e(tag, msg, tr);
}
}
2 changes: 1 addition & 1 deletion app/src/main/java/com/haishinkit/util/ByteBufferUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ public static String toHexString(ByteBuffer buffer) {
StringBuilder builder = new StringBuilder();
byte[] bytes = buffer.array();
for (byte b : bytes) {
builder.append(String.format("%x", b));
builder.append(String.format("0x%02x,", b & 0xff));
}
return builder.toString();
}
Expand Down
15 changes: 15 additions & 0 deletions app/src/main/java/com/haishinkit/util/ILogAdapter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.haishinkit.util;

public interface ILogAdapter {
public int v(String tag, String msg);
public int v(String tag, String msg, Throwable tr);
public int d(String tag, String msg);
public int d(String tag, String msg, Throwable tr);
public int i(String tag, String msg);
public int i(String tag, String msg, Throwable tr);
public int w(String tag, String msg);
public int w(String tag, String msg, Throwable tr);
public int w(String tag, Throwable tr);
public int e(String tag, String msg);
public int e(String tag, String msg, Throwable tr);
}
56 changes: 56 additions & 0 deletions app/src/main/java/com/haishinkit/util/Log.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package com.haishinkit.util;

public final class Log {
private static ILogAdapter adapter = new SystemLogAdapter();

static {
String runtime = System.getProperty("java.runtime.name");
if (0 <= runtime.indexOf("Android")) {
adapter = new AndroidLogAdapter();
}
}

public static int v(String tag, String msg) {
return adapter.v(tag, msg);
}

public static int v(String tag, String msg, Throwable tr) {
return adapter.v(tag, msg, tr);
}

public static int d(String tag, String msg) {
return adapter.v(tag, msg);
}

public static int d(String tag, String msg, Throwable tr) {
return adapter.d(tag, msg, tr);
}

public static int i(String tag, String msg) {
return adapter.i(tag, msg);
}

public static int i(String tag, String msg, Throwable tr) {
return adapter.i(tag, msg, tr);
}

public static int w(String tag, String msg) {
return adapter.w(tag, msg);
}

public static int w(String tag, String msg, Throwable tr) {
return adapter.w(tag, msg, tr);
}

public static int w(String tag, Throwable tr) {
return adapter.w(tag, tr);
}

public static int e(String tag, String msg) {
return adapter.e(tag, msg);
}

public static int e(String tag, String msg, Throwable tr) {
return adapter.e(tag, msg, tr);
}
}
Loading

0 comments on commit ffd5821

Please sign in to comment.