try {
log.debug(":: recordMeetingStream ::");
IConnection current = Red5.getConnectionLocal();
Client currentClient = this.sessionManager
.getClientByStreamId(current.getClient().getId(), null);
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.sessionManager.updateClientByStreamId(current.getClient()
.getId(), currentClient, false, null);
// 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) {
Client rcl = this.sessionManager
.getClientByStreamId(conn.getClient()
.getId(), null);
// Send every user a notification that the recording did start
if (!rcl.getIsAVClient()) {
((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.isScreenPublishStarted()) {
String streamName_Screen = generateFileName(
flvRecordingId, rcl
.getStreamPublishName()
.toString());
Long flvRecordingMetaDataId = this.flvRecordingMetaDataDao
.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.sessionManager
.updateClientByStreamId(
rcl.getStreamid(), rcl, false, null);
}
} else if
// if the user does publish av, a, v
// But we only record av or a, video only is not
// interesting
(rcl.getIsAVClient() &&
(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.flvRecordingMetaDataDao
.addFlvRecordingMetaData(
flvRecordingId,
rcl.getFirstname() + " "
+ rcl.getLastname(),
now, isAudioOnly, isVideoOnly,
false, streamName,
rcl.getInterviewPodId());
rcl.setFlvRecordingMetaDataId(flvRecordingMetaDataId);
this.sessionManager.updateClientByStreamId(
rcl.getStreamid(), rcl, false, null);
// Start FLV recording
recordShow(conn,
String.valueOf(rcl.getBroadCastID())
.toString(), streamName,
flvRecordingMetaDataId, false,
isInterview);
}