package wrapper; import rtmp.RtmpClientManager; /** * This class handles the RTMP Streaming calls of the client. * */ public class RtmpStreamer { private RtmpClientManager clientManager; /** * Constructor of RtmpStreamer. It initializes the clientManager. */ public RtmpStreamer() { clientManager = new RtmpClientManager(); } /** * Connects to the server. * @param host : host address.eg. 192.168.1.67. One need not to mention "rtmp" before ip address * @param port : port * @param stream : name of the stream to retrieve from server * @param AppName : application name * @param userName : userName if authentication is required * @param password : password * @return */ public String connectToServer (final String host, final int port, final String stream, final String AppName, final String userName, final String password) { return clientManager.connectToServer(host, port, stream, AppName, userName, password); } /** * DisConnects the user from the server * @return */ public int disconnectFromServer() { return clientManager.disconnectFromServer(); } /** * Sets the audio decoder specific info of the stream * @param decSpecInfo : Audio decoder specific info */ /** * Sets the audio decoder specific info of the stream * @param SampleFreq - sampling frequency of audio stream * @param NumChannel - no. of channels of audio stream */ public void setAACDecoderSpecInfo(int SampleFreq, int NumChannel) { clientManager.setAACDecoderSpecInfo(DecoderSpecificInfo.AudioConstructorInfo(2, //Objecttype = 2 for AAC SampleFreq, NumChannel)); } /** * Sets the video decoder specific info of the stream * @param decSpecInfo : video decoder specific info returned by encoder. * @param decSpecInfoSize : size of video decoder specific info returned by encoder. */ public void setH264DecoderSpecInfo(byte[] decSpecInfo, int decSpecInfoSize) { clientManager.setH264DecoderSpecInfo(DecoderSpecificInfo.VideoConstructorInfo(decSpecInfo, decSpecInfoSize)); } /** * This method publishes audio data to server along with it's timeStamp. It has to be called once the connection to server is established. * @param timeStamp : timeStamp of the data to publish to server * @param buf : audio data * @param size : size of audio data * @throws Exception : throws exception if connection to server get disconnect */ public synchronized void putAudioData(final long timeStamp, final byte[] buf, final int size) throws Exception { clientManager.putAudioData(timeStamp, buf, size); } /** * This method publishes video data to server along with it's timestamp. It has to be called once the connection to server is established. * @param timeStamp : timeStamp of the data to publish to server * @param buf : video data * @param size : size of video data * @param keyframe * @throws Exception : throws exception if connection to server get disconnect */ public synchronized void putVideoData(final long timeStamp, final byte[] buf, final int size, final boolean keyframe) throws Exception { clientManager.putVideoData(timeStamp, buf, size, keyframe); } /* * Main Function to test the Api Calls & for integration in the application. * */ // public static void main(String[] args) // { // RtmpClientManager rtmpClientManager = new RtmpClientManager(); // rtmpClientManager.connectToServer("192.168.1.100", 1935, "test", "AppName", "user", "pass"); // byte[] AudioDecoderSpecInfo = new byte[2]; // int SampleFreq = 44100; // int NumChannel = 2; // byte[] audioInfo= DecoderSpecificInfo.AudioConstructorInfo(2, //Objecttype = 2 for AAC // SampleFreq, // NumChannel); // rtmpClientManager.setAACDecoderSpecInfo(audioInfo); /* * test byte array is the example of the data which waw collected from the encoder. * decSpecInfoSize = h264encoder.TatvikH264EncoderGetDecoderSpecInfo(test, 128); //128 is the size of the test byte buffer * */ // int decSpecInfoSize = 27; // 27 is the buffer size of the data which is equal to decSpecInfoSize // byte[] test = {0, 0, 0, 1, 39, 66, 0, 41, -110, 84, 13, 10, -78, 120, 0, 15, 49, -110, -128, 0, 0, 0, 1, 40, -50, 60, -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // byte[] videoInfo = DecoderSpecificInfo.VideoConstructorInfo(test,decSpecInfoSize); // rtmpClientManager.setH264DecoderSpecInfo(videoInfo); // System.out.println(rtmpClientManager.outputResult); // if(rtmpClientManager.outputResult.contains("Connection Successed")) // rtmpClientManager.disconnectFromServer(); // } }