Gestion des enregistrements
Ce guide vous montrera comment gérer les enregistrements de vos sessions à l'aide de l'API Meetings.
Activation de l'enregistrement
Il existe deux façons d'activer l'enregistrement pour une salle de réunion. Vous pouvez soit activer l'enregistrement dans l'interface utilisateur pour permettre aux participants de démarrer ou d'arrêter l'enregistrement, ou de configurer la réunion pour qu'elle s'arrête. enregistrer automatiquement. Vous pouvez également configurer l'enregistrement de manière à ce que seul le propriétaire d'une salle soit enregistré, ainsi que tout partage d'écran au cours de la réunion.
Permettre aux participants de commencer l'enregistrement à l'aide de l'interface utilisateur de la réunion
Tout d'abord, vous pouvez activer l'option d'enregistrement dans l'interface utilisateur d'une réunion à l'aide de la fonction is_recording_available. Cette fonction peut être activée pour les salles instantanées et à long terme - par exemple, cette demande créera une salle instantanée appelée "Nouvelle salle de réunion" qui permet aux participants d'une session d'activer l'enregistrement :
const credentials = new Auth({
privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH,
applicationId: VONAGE_APPLICATION_ID,
});
const options = {};
const meetingsClient = new Meetings(credentials, options);
await meetingsClient.createRoom({
type: MeetingType.INSTANT,
displayName: "New Meeting Room",
availableFeatures: {
isRecordingAvailable: true,
},
});
var client = VonageClient.builder()
.applicationId(VONAGE_APPLICATION_ID)
.privateKeyPath(VONAGE_PRIVATE_KEY_PATH)
.build();
var room = MeetingRoom.builder("New Meeting Room")
.availableFeatures(AvailableFeatures.builder()
.isRecordingAvailable(true)
.build()
)
.build();
client.getMeetingsClient().createRoom(room);
var credentials = Credentials.FromAppIdAndPrivateKeyPath(applicationId, privateKeyPath);
var client = new VonageClient(credentials);
var request = CreateRoomRequest.Build()
.WithDisplayName("New Meeting Room")
.WithFeatures(new Room.Features {IsRecordingAvailable = true})
.Create();
var response = await client.MeetingsClient.CreateRoomAsync(request);
$keypair = new Vonage\Client\Keypair(
VONAGE_APPLICATION_PRIVATE_KEY_PATH
VONAGE_APPLICATION_ID,
);
$client = new Vonage\Client(
$keypair
)
$room = (new Vonage\Meetings\Room())->fromArray([
'display_name' => 'New Meeting Room',
'available_features' => [
'is_recording_available' => true
]
]);
$createdRoom = $client->meetings()->createRoom($room);
client = vonage.Client(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_APPLICATION_PRIVATE_KEY_PATH,
)
response = client.meetings.create_room({
'display_name': 'New Meeting Room',
'available_features': {
'is_recording_available': True,
},
})
Options d'enregistrement préconfigurées
Les recording_options peut être utilisé pour activer/désactiver ces options :
auto_record: Enregistre automatiquement toutes les sessions dans cette salle. Il n'est pas possible d'arrêter l'enregistrement lorsque ce paramètre est réglé surtrue.record_only_owner: Enregistrer uniquement l'écran du propriétaire ou tout autre écran partagé de la vidéo.
Par exemple, cela créera une salle à long terme qui sera automatiquement enregistrée, mais seuls le propriétaire de la salle et les écrans partagés seront affichés dans l'enregistrement :
const credentials = new Auth({
privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH,
applicationId: VONAGE_APPLICATION_ID,
});
const options = {};
const meetingsClient = new Meetings(credentials, options);
const room = await meetingsClient.createRoom({
type: MeetingType.INSTANT,
displayName: ROOM_DISPLAY_NAME,
recordingOptions: {
autoRecord: true,
},
});
var client = VonageClient.builder()
.applicationId(VONAGE_APPLICATION_ID)
.privateKeyPath(VONAGE_PRIVATE_KEY_PATH)
.build();
var room = MeetingRoom.builder("New Meeting Room")
.type(RoomType.LONG_TERM)
.expiresAt(EXPIRATION_DATE)
.recordingOptions(RecordingOptions.builder()
.autoRecord(true)
.recordOnlyOwner(true)
.build()
)
.build();
client.getMeetingsClient().createRoom(room);
var credentials = Credentials.FromAppIdAndPrivateKeyPath(applicationId, privateKeyPath);
var client = new VonageClient(credentials);
var request = CreateRoomRequest.Build()
.WithDisplayName("New Meeting Room")
.AsLongTermRoom(expirationDate)
.WithRecordingOptions(new Room.RecordingOptions {AutoRecord = true, RecordOnlyOwner = true})
.Create();
var response = await client.MeetingsClient.CreateRoomAsync(request);
$keypair = new Vonage\Client\Keypair(
VONAGE_APPLICATION_PRIVATE_KEY_PATH
VONAGE_APPLICATION_ID,
);
$client = new Vonage\Client($keypair);
$room = (new Vonage\Meetings\Room())->fromArray([
'display_name' => 'New Meeting Room',
'type' => 'long_term',
'expires_at' => '2024-07-10 15:00:00.000'
'recording_options' => [
'auto_record' => true,
'record_only_owner' => true
]
]);
$createdRoom = $client->meetings()->createRoom($room);
client = vonage.Client(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_APPLICATION_PRIVATE_KEY_PATH,
)
response = client.meetings.create_room({
'display_name': 'New Meeting Room',
'type': 'long_term',
'expires_at': '2024-07-10 15:00:00.000',
'recording_options': {
'auto_record': True,
'record_only_owner': True,
}
})
Enregistrement des rappels
Vous recevrez trois rappels lors de l'enregistrement d'une session à l'aide de l'API Meetings. Vous devez prendre note de l'appel recording_id et session_idCes derniers seront utilisés pour retrouver et gérer vos enregistrements ultérieurement.
Début de l'enregistrement
Une notification indiquant que l'enregistrement a commencé pour une session.
{
"event": "recording:started",
"recording_id": "9f6fe8ae-3458-4a72-b532-8276d5533e97",
"session_id": "2_MX40NjMwODczMn5-MTU3NTgyODEwNzQ2MH5OZDJrVmdBRUNDbG5MUzNqNX20yQ1Z-fg"
}
Enregistrement Ended
Notification de la fin de l'enregistrement d'une session.
{
"event": "recording:ended",
"recording_id": "9f6fe8ae-3458-4a72-b532-8276d5533e97",
"session_id": "2_MX40NjMwODczMn5-MTU3NTgyODEwNzQ2MH5OZDJrVmdBRUNDbG5MUzNqNX20yQ1Z-fg",
"started_at": "2023-06-06T07:15:13.974Z",
"ended_at": "2023-06-06T08:15:13.974Z",
"duration": 3600
}
Enregistrement téléchargé
Une notification indiquant qu'un enregistrement d'une session a été téléchargé et qu'il est accessible via la page d'accueil du site web de l'UE. url.
{
"event": "recording:uploaded",
"recording_id": "9f6fe8ae-3458-4a72-b532-8276d5533e97",
"session_id": "2_MX40NjMwODczMn5-MTU3NTgyODEwNzQ2MH5OZDJrVmdBRUNDbG5MUzNqNX20yQ1Z-fg",
"room_id": "9f6fe8ae-3458-4a72-b532-8276d5533e97",
"started_at": "2023-06-06T07:15:13.974Z",
"ended_at": "2023-06-06T08:15:13.974Z",
"duration": "2023-06-06T08:15:13.974Z",
"url": "https://prod-meetings-recordings.s3.amazonaws.com/123/9f6fe8ae-3458-4a72-b532-8276d5533e97/archive.mp4"
}
Récupération des enregistrements
Les enregistrements sont associés à la session au cours de laquelle ils ont eu lieu. Pour récupérer ou gérer les enregistrements, vous aurez besoin des éléments suivants
les session_idque l'on peut trouver dans les callbacks, ou la fonction recording_idqui peut
être récupéré à l'aide de l'identifiant de session ou peut
peuvent également être trouvés dans les rappels.
Remarque : les enregistrements sont conservés pendant 30 jours.
Récupérer tous les enregistrements d'une session
https://api-eu.vonage.com/v1/meetings/sessions/:session_id/recording
Pour obtenir tous les enregistrements d'une session, vous pouvez envoyer une requête
sessions à l'aide de l'option session_id: Exemple de demande
const credentials = new Auth({
privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH,
applicationId: VONAGE_APPLICATION_ID,
});
const options = {};
const meetingsClient = new Meetings(credentials, options);
const recordings = await meetingsClient.getSessionRecordings("2_MX40NjMwODczMn5-MTU3NTgyODEwNzQ2MH5OZDJrVmdBRUNDbG5MUzNqNX20yQ1Z-fg");
var client = VonageClient.builder()
.applicationId(VONAGE_APPLICATION_ID)
.privateKeyPath(VONAGE_PRIVATE_KEY_PATH)
.build();
var recordings = client.getMeetingsClient().listRecordings(
"2_MX40NjMwODczMn5-MTU3NTgyODEwNzQ2MH5OZDJrVmdBRUNDbG5MUzNqNX20yQ1Z-fg"
);
var credentials = Credentials.FromAppIdAndPrivateKeyPath(applicationId, privateKeyPath);
var client = new VonageClient(credentials);
var request = GetRecordingsRequest.Parse("2_MX40NjMwODczMn5-MTU3NTgyODEwNzQ2MH5OZDJrVmdBRUNDbG5MUzNqNX20yQ1Z-fg");
var response = await client.MeetingsClient.GetRecordingsAsync(request);
$keypair = new Vonage\Client\Keypair(
VONAGE_APPLICATION_PRIVATE_KEY_PATH
VONAGE_APPLICATION_ID,
);
$client = new Vonage\Client($keypair);
$recordings = $client->meetings()->getRecordingsFromSession('2_MX40NjMwODczMn5-MTU3NTgyODEwNzQ2MH5OZDJrVmdBRUNDbG5MUzNqNX20yQ1Z-fg');
client = vonage.Client(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_APPLICATION_PRIVATE_KEY_PATH,
)
response = client.meetings.get_session_recordings('2_MX40NjMwODczMn5-MTU3NTgyODEwNzQ2MH5OZDJrVmdBRUNDbG5MUzNqNX20yQ1Z-fg')
This will return an object of the Vonage::Meetings::Sessions::ListResponse class.
This class defines an each method, allowing you to iterate through the recordings array returned in ther response. For example:
The class also includes Enumerable, so you can call any instance method from that module on the object. For example:
Exemple de réponse
{
"_embedded": {
"recordings": [
{
"id": "9f6fe8ae-3458-4a72-b532-8276d5533e97",
"session_id": "2_MX40NjMwODczMn5-MTU3NTgyODEwNzQ2MH5OZDJrVmdBRUNDbG5MUzNqNX20yQ1Z-fg",
"started_at": "2023-06-06T07:15:13.974Z",
"ended_at": "2023-06-06T08:15:13.974Z",
"status": "stopped",
"_links": {
"url": {
"href": "https://prod-meetings-recordings.s3.amazonaws.com/123/9f6fe8ae-3458-4a72-b532-8276d5533e97/archive.mp4"
}
}
}
]
}
}
Récupérer un enregistrement individuel
https://api-eu.vonage.com/v1/meetings/recordings/:recording_id
Une fois que vous avez le recording_idvous pouvez utiliser la fonction recordings pour récupérer un enregistrement :
Exemple de demande
const credentials = new Auth({
privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH,
applicationId: VONAGE_APPLICATION_ID,
});
const options = {};
const meetingsClient = new Meetings(credentials, options);
const recording = await meetingsClient.getRecording(ROOM_ID, "9f6fe8ae-3458-4a72-b532-8276d5533e97");
var client = VonageClient.builder()
.applicationId(VONAGE_APPLICATION_ID)
.privateKeyPath(VONAGE_PRIVATE_KEY_PATH)
.build();
var recording = client.getMeetingsClient().getRecording(
UUID.fromString("9f6fe8ae-3458-4a72-b532-8276d5533e97")
);
var credentials = Credentials.FromAppIdAndPrivateKeyPath(applicationId, privateKeyPath);
var client = new VonageClient(credentials);
var request = GetRecordingRequest.Parse(new Guid("9f6fe8ae-3458-4a72-b532-8276d5533e97"));
var response = await client.MeetingsClient.GetRecordingAsync(request);
$keypair = new Vonage\Client\Keypair(
VONAGE_APPLICATION_PRIVATE_KEY_PATH
VONAGE_APPLICATION_ID,
);
$client = new Vonage\Client($keypair);
$recording = $client->meetings()->getRecording('9f6fe8ae-3458-4a72-b532-8276d5533e97');
client = vonage.Client(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_APPLICATION_PRIVATE_KEY_PATH,
)
response = client.meetings.get_recording('9f6fe8ae-3458-4a72-b532-8276d5533e97')
This will return a generic Vonage::Response object.
The Vonage::Response object de-serializes the returned JSON data into Vonage::Entity objects, and provides getter methods for the top level properties of that JSON data, for example:
For properties in the JSON data where the value is a JSON object, this is itself de-serialized into a Vonage::Entity object, with its own getter methods. For example, the _links getter returns a Vonage::Entity object with a url getter, which itself returns a Vonage::Entity object with a href getter. You can chain these getter method invocations to get to the data you need:
Exemple de réponse
{
"id": "9f6fe8ae-3458-4a72-b532-8276d5533e97",
"session_id": "2_MX40NjMwODczMn5-MTU3NTgyODEwNzQ2MH5OZDJrVmdBRUNDbG5MUzNqNX20yQ1Z-fg",
"started_at": "2023-06-06T07:15:13.974Z",
"ended_at": "2023-06-06T08:15:13.974Z",
"status": "stopped",
"_links": {
"url": {
"href": "https://prod-meetings-recordings.s3.amazonaws.com/123/9f6fe8ae-3458-4a72-b532-8276d5533e97/archive.mp4"
}
}
}
Supprimer un enregistrement
[EFFACER] : https://api-eu.vonage.com/v1/meetings/recordings/:recording_id
Vous pouvez supprimer un enregistrement par une action
recording_id sur le recordings point final : Exemple de demande
const credentials = new Auth({
privateKey: VONAGE_APPLICATION_PRIVATE_KEY_PATH,
applicationId: VONAGE_APPLICATION_ID,
});
const options = {};
const meetingsClient = new Meetings(credentials, options);
await meetingsClient.deleteRecording("9f6fe8ae-3458-4a72-b532-8276d5533e97");
var client = VonageClient.builder()
.applicationId(VONAGE_APPLICATION_ID)
.privateKeyPath(VONAGE_PRIVATE_KEY_PATH)
.build();
client.getMeetingsClient().deleteRecording(
UUID.fromString("9f6fe8ae-3458-4a72-b532-8276d5533e97")
);
var credentials = Credentials.FromAppIdAndPrivateKeyPath(applicationId, privateKeyPath);
var client = new VonageClient(credentials);
var request = DeleteRecordingRequest.Parse(new Guid("9f6fe8ae-3458-4a72-b532-8276d5533e97"));
var response = await client.MeetingsClient.DeleteRecordingAsync(request);
$keypair = new Vonage\Client\Keypair(
VONAGE_APPLICATION_PRIVATE_KEY_PATH
VONAGE_APPLICATION_ID,
);
$client = new Vonage\Client($keypair);
$client->meetings()->deleteRecording('9f6fe8ae-3458-4a72-b532-8276d5533e97');
client = vonage.Client(
application_id=VONAGE_APPLICATION_ID,
private_key=VONAGE_APPLICATION_PRIVATE_KEY_PATH,
)
client.meetings.delete_recording('9f6fe8ae-3458-4a72-b532-8276d5533e97')
Cryptage des enregistrements
Tous les enregistrements sont stockés sur Amazon S3 et sont automatiquement cryptés lors de leur téléchargement, comme indiqué dans le document Documentation Amazon:
Amazon S3 applique désormais le chiffrement côté serveur avec les clés gérées par Amazon S3 (SSE-S3) comme niveau de chiffrement de base pour chaque panier dans Amazon S3. À partir du 5 janvier 2023, tous les nouveaux téléchargements d'objets vers Amazon S3 sont automatiquement chiffrés sans coût supplémentaire et sans impact sur les performances. L'état du chiffrement automatique pour la configuration de chiffrement par défaut des godets S3 et pour les nouveaux téléchargements d'objets est disponible dans les journaux AWS CloudTrail, S3 Inventory, S3 Storage Lens, la console Amazon S3, et en tant qu'en-tête de réponse supplémentaire de l'API Amazon S3 dans l'interface de ligne de commande AWS et les SDK AWS. Pour plus d'informations, voir Cryptage par défaut FAQ.