package org.red5.client.net.rtmps;
import java.util.Map;
import org.junit.Test;
import org.red5.client.net.rtmp.ClientExceptionHandler;
import org.red5.client.util.PropertiesReader;
import org.red5.io.utils.ObjectMap;
import org.red5.server.api.service.IPendingServiceCall;
import org.red5.server.api.service.IPendingServiceCallback;
import org.red5.server.net.rtmp.event.Ping;
public class RTMPSClientTest {
// https://github.com/Red5/red5-client/pull/31
@Test
public void test31() throws InterruptedException {
final RTMPSClient client = new RTMPSClient();
client.setConnectionClosedHandler(new Runnable() {
@Override
public void run() {
System.out.println("Connection closed");
}
});
client.setExceptionHandler(new ClientExceptionHandler() {
@Override
public void handleException(Throwable throwable) {
throwable.printStackTrace();
}
});
Thread t = new Thread(new Runnable() {
@Override
public void run() {
client.connect(PropertiesReader.getProperty("rtmps.server"), Integer.valueOf(PropertiesReader.getProperty("rtmps.port")), PropertiesReader.getProperty("rtmps.app"), new IPendingServiceCallback() {
@Override
public void resultReceived(IPendingServiceCall result) {
System.out.println("resultReceived: " + result);
ObjectMap<?, ?> map = (ObjectMap<?, ?>) result.getResult();
String code = (String) map.get("code");
System.out.printf("Response code: %s\n", code);
if ("NetConnection.Connect.Rejected".equals(code)) {
System.out.printf("Rejected: %s\n", map.get("description"));
client.disconnect();
} else if ("NetConnection.Connect.Success".equals(code)) {
System.out.println("Success: " + result.isSuccess());
// if its oflaDemo, get the list of flvs
if ("oflaDemo".equals(PropertiesReader.getProperty("rtmps.app"))) {
client.invoke("demoService.getListOfAvailableFLVs", new Object[] {}, new IPendingServiceCallback() {
@Override
public void resultReceived(IPendingServiceCall call) {
System.out.println("methodCallCallback");
Map<?, ?> map = (Map<?, ?>) call.getResult();
System.out.printf("Response %s\n", map);
}
});
}
client.createStream(new IPendingServiceCallback() {
@Override
public void resultReceived(IPendingServiceCall call) {
Number streamId = (Number) call.getResult();
// live buffer 0.5s / vod buffer 4s
if (Boolean.valueOf(PropertiesReader.getProperty("rtmps.live"))) {
client.ping(Ping.CLIENT_BUFFER, streamId, 500);
client.play(streamId, PropertiesReader.getProperty("rtmps.name"), -1, -1);
} else {
client.ping(Ping.CLIENT_BUFFER, streamId, 4000);
client.play(streamId, PropertiesReader.getProperty("rtmps.name"), 0, -1);
}
}
});
}
}
});
}
});
t.start();
t.join();
System.out.println("Joined");
Thread.sleep(60000L);
// disconnect
client.disconnect();
}
}