package com.laifeng.sopcastsdk.controller;
import android.media.MediaCodec;
import com.laifeng.sopcastsdk.audio.OnAudioEncodeListener;
import com.laifeng.sopcastsdk.configuration.AudioConfiguration;
import com.laifeng.sopcastsdk.configuration.VideoConfiguration;
import com.laifeng.sopcastsdk.controller.audio.IAudioController;
import com.laifeng.sopcastsdk.controller.video.IVideoController;
import com.laifeng.sopcastsdk.stream.packer.Packer;
import com.laifeng.sopcastsdk.stream.sender.Sender;
import com.laifeng.sopcastsdk.utils.SopCastUtils;
import com.laifeng.sopcastsdk.video.OnVideoEncodeListener;
import java.nio.ByteBuffer;
/**
* @Title: StreamController
* @Package com.laifeng.sopcastsdk.controller
* @Description:
* @Author Jim
* @Date 16/9/14
* @Time 上午11:44
* @Version
*/
public class StreamController implements OnAudioEncodeListener, OnVideoEncodeListener, Packer.OnPacketListener{
private Packer mPacker;
private Sender mSender;
private IVideoController mVideoController;
private IAudioController mAudioController;
public StreamController(IVideoController videoProcessor, IAudioController audioProcessor) {
mAudioController = audioProcessor;
mVideoController = videoProcessor;
}
public void setVideoConfiguration(VideoConfiguration videoConfiguration) {
mVideoController.setVideoConfiguration(videoConfiguration);
}
public void setAudioConfiguration(AudioConfiguration audioConfiguration) {
mAudioController.setAudioConfiguration(audioConfiguration);
}
public void setPacker(Packer packer) {
mPacker = packer;
mPacker.setPacketListener(this);
}
public void setSender(Sender sender) {
mSender = sender;
}
public synchronized void start() {
SopCastUtils.processNotUI(new SopCastUtils.INotUIProcessor() {
@Override
public void process() {
if(mPacker == null) {
return;
}
if(mSender == null) {
return;
}
mPacker.start();
mSender.start();
mVideoController.setVideoEncoderListener(StreamController.this);
mAudioController.setAudioEncodeListener(StreamController.this);
mAudioController.start();
mVideoController.start();
}
});
}
public synchronized void stop() {
SopCastUtils.processNotUI(new SopCastUtils.INotUIProcessor() {
@Override
public void process() {
mVideoController.setVideoEncoderListener(null);
mAudioController.setAudioEncodeListener(null);
mAudioController.stop();
mVideoController.stop();
if(mSender != null) {
mSender.stop();
}
if(mPacker != null) {
mPacker.stop();
}
}
});
}
public synchronized void pause() {
SopCastUtils.processNotUI(new SopCastUtils.INotUIProcessor() {
@Override
public void process() {
mAudioController.pause();
mVideoController.pause();
}
});
}
public synchronized void resume() {
SopCastUtils.processNotUI(new SopCastUtils.INotUIProcessor() {
@Override
public void process() {
mAudioController.resume();
mVideoController.resume();
}
});
}
public void mute(boolean mute) {
mAudioController.mute(mute);
}
public int getSessionId() {
return mAudioController.getSessionId();
}
public boolean setVideoBps(int bps) {
return mVideoController.setVideoBps(bps);
}
@Override
public void onAudioEncode(ByteBuffer bb, MediaCodec.BufferInfo bi) {
if(mPacker != null) {
mPacker.onAudioData(bb, bi);
}
}
@Override
public void onVideoEncode(ByteBuffer bb, MediaCodec.BufferInfo bi) {
if(mPacker != null) {
mPacker.onVideoData(bb, bi);
}
}
@Override
public void onPacket(byte[] data, int packetType) {
if(mSender != null) {
mSender.onData(data, packetType);
}
}
}