diff --git a/akka-bbb-transcode/src/main/java/org/bigbluebutton/transcode/core/VideoTranscoder.java b/akka-bbb-transcode/src/main/java/org/bigbluebutton/transcode/core/VideoTranscoder.java index 39cb55bf363a688379abb40e0e0679f179c41c79..e98370750410b29cf9a1f7998aaba8f0e6e40471 100644 --- a/akka-bbb-transcode/src/main/java/org/bigbluebutton/transcode/core/VideoTranscoder.java +++ b/akka-bbb-transcode/src/main/java/org/bigbluebutton/transcode/core/VideoTranscoder.java @@ -179,44 +179,28 @@ public class VideoTranscoder extends UntypedActor implements ProcessMonitorObser this.type = Type.TRANSCODE_H264_TO_H263; this.sourceModule = params.get(Constants.MODULE); this.sourceIp = params.get(Constants.LOCAL_IP_ADDRESS); - this.localVideoPort = params.get(Constants.LOCAL_VIDEO_PORT); - this.remoteVideoPort = params.get(Constants.REMOTE_VIDEO_PORT); this.destinationIp = params.get(Constants.DESTINATION_IP_ADDRESS); - this.voiceBridge = params.get(Constants.VOICE_CONF); - this.callername = params.get(Constants.CALLERNAME); this.videoStreamName = params.get(Constants.INPUT); break; case Constants.TRANSCODE_ROTATE_RIGHT: this.type = Type.TRANSCODE_ROTATE_RIGHT; this.sourceIp = params.get(Constants.LOCAL_IP_ADDRESS); - this.localVideoPort = params.get(Constants.LOCAL_VIDEO_PORT); - this.remoteVideoPort = params.get(Constants.REMOTE_VIDEO_PORT); this.destinationIp = params.get(Constants.DESTINATION_IP_ADDRESS); - this.voiceBridge = params.get(Constants.VOICE_CONF); - this.callername = params.get(Constants.CALLERNAME); this.videoStreamName = params.get(Constants.INPUT); break; case Constants.TRANSCODE_ROTATE_LEFT: this.type = Type.TRANSCODE_ROTATE_LEFT; this.sourceIp = params.get(Constants.LOCAL_IP_ADDRESS); - this.localVideoPort = params.get(Constants.LOCAL_VIDEO_PORT); - this.remoteVideoPort = params.get(Constants.REMOTE_VIDEO_PORT); this.destinationIp = params.get(Constants.DESTINATION_IP_ADDRESS); - this.voiceBridge = params.get(Constants.VOICE_CONF); - this.callername = params.get(Constants.CALLERNAME); this.videoStreamName = params.get(Constants.INPUT); break; case Constants.TRANSCODE_ROTATE_UPSIDE_DOWN: this.type = Type.TRANSCODE_ROTATE_UPSIDE_DOWN; this.sourceIp = params.get(Constants.LOCAL_IP_ADDRESS); - this.localVideoPort = params.get(Constants.LOCAL_VIDEO_PORT); - this.remoteVideoPort = params.get(Constants.REMOTE_VIDEO_PORT); this.destinationIp = params.get(Constants.DESTINATION_IP_ADDRESS); - this.voiceBridge = params.get(Constants.VOICE_CONF); - this.callername = params.get(Constants.CALLERNAME); this.videoStreamName = params.get(Constants.INPUT); break; diff --git a/bbb-video/src/main/java/org/bigbluebutton/app/video/VideoApplication.java b/bbb-video/src/main/java/org/bigbluebutton/app/video/VideoApplication.java index 7ff732dce4b7eafbd02f790ffe0bb342071bd58b..868c323ff9fd8c75db1c9753a9188c82231ee3f5 100755 --- a/bbb-video/src/main/java/org/bigbluebutton/app/video/VideoApplication.java +++ b/bbb-video/src/main/java/org/bigbluebutton/app/video/VideoApplication.java @@ -213,6 +213,28 @@ public class VideoApplication extends MultiThreadedApplicationAdapter { } } + private void requestRotateVideoTranscode(IBroadcastStream stream) { + IConnection conn = Red5.getConnectionLocal(); + String userId = getUserId(); + String meetingId = conn.getScope().getName(); + String streamId = stream.getPublishedName(); + String ipAddress = conn.getHost(); + + switch (VideoRotator.getDirection(streamId)) { + case VideoRotator.ROTATE_RIGHT: + publisher.startRotateRightTranscodeRequest(meetingId, userId, streamId, ipAddress); + break; + case VideoRotator.ROTATE_LEFT: + publisher.startRotateLeftTranscodeRequest(meetingId, userId, streamId, ipAddress); + break; + case VideoRotator.ROTATE_UPSIDE_DOWN: + publisher.startRotateUpsideDownTranscodeRequest(meetingId, userId, streamId, ipAddress); + break; + default: + break; + } + } + @Override public void streamBroadcastStart(IBroadcastStream stream) { IConnection conn = Red5.getConnectionLocal(); @@ -226,8 +248,9 @@ public class VideoApplication extends MultiThreadedApplicationAdapter { addH263PublishedStream(streamId); if (streamId.contains("/")) { if(VideoRotator.getDirection(streamId) != null) { - VideoRotator rotator = new VideoRotator(streamId); - videoRotators.put(streamId, rotator); +// VideoRotator rotator = new VideoRotator(streamId); + videoRotators.put(streamId, null); + requestRotateVideoTranscode(stream); } } else if (recordVideoStream) { @@ -277,7 +300,8 @@ public class VideoApplication extends MultiThreadedApplicationAdapter { removeH263ConverterIfNeeded(streamId); if(videoRotators.containsKey(streamId)) { // Stop rotator - videoRotators.remove(streamId).stop(); + videoRotators.remove(streamId); + // TODO: Call transcode and end video } removeH263PublishedStream(streamId); } else if (recordVideoStream) { diff --git a/bbb-video/src/main/java/org/bigbluebutton/app/video/converter/VideoRotator.java b/bbb-video/src/main/java/org/bigbluebutton/app/video/converter/VideoRotator.java index 4c56d237743904bbe1781e81f3453540576e1bee..07c4123b5cac2f3fd7bea62a0e2949ccdbf63cbc 100644 --- a/bbb-video/src/main/java/org/bigbluebutton/app/video/converter/VideoRotator.java +++ b/bbb-video/src/main/java/org/bigbluebutton/app/video/converter/VideoRotator.java @@ -74,9 +74,9 @@ public class VideoRotator { /** * Get the rotate direction from the streamName string. * @param streamName Name of the stream with rotate direction - * @return FFmpegCommand.ROTATE for the given direction if present, null otherwise + * @return String for the given direction if present, null otherwise */ - public static FFmpegCommand.ROTATE getDirection(String streamName) { + public static String getDirection(String streamName) { int index = streamName.lastIndexOf("/"); String parts[] = { streamName.substring(0, index), @@ -85,11 +85,11 @@ public class VideoRotator { switch(parts[0]) { case ROTATE_LEFT: - return FFmpegCommand.ROTATE.LEFT; + return ROTATE_LEFT; case ROTATE_RIGHT: - return FFmpegCommand.ROTATE.RIGHT; + return ROTATE_RIGHT; case ROTATE_UPSIDE_DOWN: - return FFmpegCommand.ROTATE.UPSIDE_DOWN; + return ROTATE_UPSIDE_DOWN; default: return null; } diff --git a/bbb-video/src/main/java/org/bigbluebutton/red5/pubsub/MessagePublisher.java b/bbb-video/src/main/java/org/bigbluebutton/red5/pubsub/MessagePublisher.java index db0c5b0584616338394c6f264ec382c35acb1bcd..b26eee01986518e49122d52e1e53c029cbaa9e35 100755 --- a/bbb-video/src/main/java/org/bigbluebutton/red5/pubsub/MessagePublisher.java +++ b/bbb-video/src/main/java/org/bigbluebutton/red5/pubsub/MessagePublisher.java @@ -21,4 +21,36 @@ public class MessagePublisher { sender.send(MessagingConstants.TO_USERS_CHANNEL, msg.toJson()); } + public void startRotateLeftTranscodeRequest(String meetingId, String userId, String streamId, String ipAddress) { + Map<String, String> params = new HashMap<String, String>(); + params.put(Constants.TRANSCODER_TYPE) = Constants.TRANSCODE_ROTATE_LEFT; + params.put(Constants.LOCAL_IP_ADDRESS) = ipAddress; + params.put(Constants.DESTINATION_IP_ADDRESS) = ipAddress; + params.put(Constants.INPUT) = streamId; + // TODO: transcodeId is getting userId, this probably have to change + StartTranscoderRequestMessage msg = new StartTranscoderRequestMessage(meetingId, userId, params); + sender.send(MessagingConstants.TO_BBB_TRANSCODE_SYSTEM_CHAN, msg.toJson()); + } + + public void startRotateRightTranscodeRequest(String meetingId, String userId, String streamId, String ipAddress) { + Map<String, String> params = new HashMap<String, String>(); + params.put(Constants.TRANSCODER_TYPE) = Constants.TRANSCODE_ROTATE_RIGHT; + params.put(Constants.LOCAL_IP_ADDRESS) = ipAddress; + params.put(Constants.DESTINATION_IP_ADDRESS) = ipAddress; + params.put(Constants.INPUT) = streamId; + // TODO: transcodeId is getting userId, this probably have to change + StartTranscoderRequestMessage msg = new StartTranscoderRequestMessage(meetingId, userId, params); + sender.send(MessagingConstants.TO_BBB_TRANSCODE_SYSTEM_CHAN, msg.toJson()); + } + + public void startRotateUpsideDownTranscodeRequest(String meetingId, String userId, String streamId, String ipAddress) { + Map<String, String> params = new HashMap<String, String>(); + params.put(Constants.TRANSCODER_TYPE) = Constants.TRANSCODE_ROTATE_UPSIDE_DOWN; + params.put(Constants.LOCAL_IP_ADDRESS) = ipAddress; + params.put(Constants.DESTINATION_IP_ADDRESS) = ipAddress; + params.put(Constants.INPUT) = streamId; + // TODO: transcodeId is getting userId, this probably have to change + StartTranscoderRequestMessage msg = new StartTranscoderRequestMessage(meetingId, userId, params); + sender.send(MessagingConstants.TO_BBB_TRANSCODE_SYSTEM_CHAN, msg.toJson()); + } }