public String recordMeetingStream(String roomRecordingName, String comment, Boolean isInterview){
try {
IConnection current = Red5.getConnectionLocal();
RoomClient currentClient = this.clientListManager.getClientByStreamId(current.getClient().getId());
Long room_id = currentClient.getRoom_id();
Date now = new Date();
//Receive flvRecordingId
Long flvRecordingId = this.flvRecordingDaoImpl.addFlvRecording("", roomRecordingName, null, currentClient.getUser_id(),
room_id, now, null, currentClient.getUser_id(), comment, currentClient.getStreamid(),
currentClient.getVWidth(),currentClient.getVHeight(), isInterview);
//Update Client and set Flag
currentClient.setIsRecording(true);
currentClient.setFlvRecordingId(flvRecordingId);
this.clientListManager.updateClientByStreamId(current.getClient().getId(), currentClient);
//get all stream and start recording them
Collection<Set<IConnection>> conCollection = current.getScope().getConnections();
for (Set<IConnection> conset : conCollection) {
for (IConnection conn : conset) {
if (conn != null) {
if (conn instanceof IServiceCapableConnection) {
RoomClient rcl = this.clientListManager.getClientByStreamId(conn.getClient().getId());
log.debug("is this users still alive? :"+rcl);
//FIXME: Check if this function is really in use at the moment
if (rcl.getIsScreenClient() != null && rcl.getIsScreenClient()) {
//continue;
} else {
((IServiceCapableConnection) conn).invoke("startedRecording",new Object[] { currentClient }, this);
}
//If its the recording client we need another type of Meta Data
if (rcl.getIsScreenClient()) {
if (rcl.getFlvRecordingId() != null && rcl.getScreenPublishStarted() != null && rcl.getScreenPublishStarted()) {
String streamName_Screen = generateFileName(flvRecordingId, rcl.getStreamPublishName().toString());
Long flvRecordingMetaDataId = this.flvRecordingMetaDataDaoImpl.addFlvRecordingMetaData(flvRecordingId,
rcl.getFirstname()+" "+rcl.getLastname(), now,
false, false, true, streamName_Screen, rcl.getInterviewPodId());
//Start FLV Recording
recordShow(conn, rcl.getStreamPublishName(), streamName_Screen, flvRecordingMetaDataId, true, isInterview);
//Add Meta Data
rcl.setFlvRecordingMetaDataId(flvRecordingMetaDataId);
this.clientListManager.updateClientByStreamId(rcl.getStreamid(), rcl);
}
} else if
//if the user does publish av, a, v
//But we only record av or a, video only is not interesting
(rcl.getAvsettings().equals("av") ||
rcl.getAvsettings().equals("a") ||
rcl.getAvsettings().equals("v")){
String streamName = generateFileName(flvRecordingId, String.valueOf(rcl.getBroadCastID()).toString());
//Add Meta Data
boolean isAudioOnly = false;
if (rcl.getAvsettings().equals("a")){
isAudioOnly = true;
}
boolean isVideoOnly = false;
if (rcl.getAvsettings().equals("v")){
isVideoOnly = true;
}
Long flvRecordingMetaDataId = this.flvRecordingMetaDataDaoImpl.addFlvRecordingMetaData(flvRecordingId,
rcl.getFirstname()+" "+rcl.getLastname(), now,
isAudioOnly, isVideoOnly, false, streamName, rcl.getInterviewPodId());
rcl.setFlvRecordingMetaDataId(flvRecordingMetaDataId);
this.clientListManager.updateClientByStreamId(rcl.getStreamid(), rcl);
//Start FLV recording
recordShow(conn, String.valueOf(rcl.getBroadCastID()).toString(), streamName, flvRecordingMetaDataId, false, isInterview);
}
}
}