Calls Recording

Conference calls recording is a key feature across video conferencing services, and VidyoPlaform provides a full set of API that will allow you to integrate any recording scenario into your solution.

Recording capabilities are provided by server component called VidyoReplay. Your VidyoPlatform tenant should contain VidyoReplay component configured in advance in order to make calls recording. All the API methods are SOAP based, and you can find entire API reference guide document here: https://www.vidyo.com/help/VidyoPlatform/4_Server-API/VidyoPlatform-Web-Services-API-Guide.pdf

In this article we will cover how to start and stop recording, how to ensure the recording process has been started successfully, and how to search and download recording file.

Start Recording

At first, in order to record the conference, you need to have a room created, and at least one participant connected to that room.

Create a Room

We will be using Scheduled type of rooms onwards. So let's create one using VidyoPortalUserService and CreateScheduledRoom API:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://portal.vidyo.com/user/v1_1">
   <soapenv:Header/>
   <soapenv:Body>
      <v1:CreateScheduledRoomRequest>       
      </v1:CreateScheduledRoomRequest>
   </soapenv:Body>
</soapenv:Envelope>
<ns1:roomURL>https://test.platform.vidyo.io/join/Nf5kaN9tWo</ns1:roomURL>

And even not entire room link, but RoomKey specifically: Nf5kaN9tWo

Get ConferenceID (EntityID)

For this we will use GetEntityByRoomKey API, passing in above RoomKey value:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://portal.vidyo.com/user/v1_1">
   <soapenv:Header/>
   <soapenv:Body>
      <v1:GetEntityByRoomKeyRequest>
         <v1:roomKey>Nf5kaN9tWo</v1:roomKey>
      </v1:GetEntityByRoomKeyRequest>
   </soapenv:Body>
</soapenv:Envelope>

Response object will contain a lot of fields about the room you just created, but you will need the first one - entityID, that in this case is 4092486:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Header/>
   <soapenv:Body>
      <ns1:GetEntityByRoomKeyResponse xmlns:ns1="http://portal.vidyo.com/user/v1_1">
         <ns1:Entity>
            <ns1:entityID>4092486</ns1:entityID>
            <ns1:EntityType>Room</ns1:EntityType>
            <ns1:ownerID>156418</ns1:ownerID>
            <ns1:displayName>230301302</ns1:displayName>
            .....

Select Recorder Prefix

There is a Recording Profile - it basically specifies what and how to record - video tiles and content share, content share only or preferably, etc. So it's a mode that you select based on your needs.

Recording profiles are configured on a Tenant level, so in reality you will not need to retrieve the list of available recording profiles each time you start the recording. However, you can use GetRecordingProfiles API to be sure of available recording profiles configured on your system:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://portal.vidyo.com/user/v1_1">
   <soapenv:Header/>
   <soapenv:Body>
      <v1:GetRecordingProfilesRequest/>
   </soapenv:Body>
</soapenv:Envelope>

Here is the typical response, and we will need recorderPrefix field value, let's take 000 that means APPLICATION-AND-CONFERENCE recording mode.

Start Recording

At this point we have all necessary information required to start the recording:

So, let's use StartRecording API to actually start the recording process:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://portal.vidyo.com/user/v1_1">
   <soapenv:Header/>
   <soapenv:Body>
      <v1:StartRecordingRequest>
         <v1:conferenceID>4092486</v1:conferenceID>
         <v1:recorderPrefix>000</v1:recorderPrefix>
         <v1:webcast>false</v1:webcast>
      </v1:StartRecordingRequest>
   </soapenv:Body>
</soapenv:Envelope>

After sending above request you should expect an HTTP200-OK response.

StartRecordingResponse of HTTP200 doesn't necessarily mean that VidyoReplay actually started recording the conference. How to ensure the recording has been indeed started is covered later in this article.

Stop Recording

For stopping ongoing recording we will need to know ConferenceID and RecorderID values.

Get RecorderID

When the conference is being recorded by VidyoReplay it technically means that VidyoReplay has also joined the call, and you can think of it as of another participant in the call. Therefore, at this step we will get information about participants in the conference that is being recorded, and extract RecorderID. For this we will use GetParticipants API, passing in ConferenceID value:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://portal.vidyo.com/user/v1_1">
   <soapenv:Header/>
   <soapenv:Body>
      <v1:GetParticipantsRequest>
         <v1:conferenceID>4092486</v1:conferenceID>
      </v1:GetParticipantsRequest>
   </soapenv:Body>
</soapenv:Envelope>

Below is a chunk of the typical response you will receive, that contains recorderID field: 1109054

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Header/>
   <soapenv:Body>
      <ns1:GetParticipantsResponse xmlns:ns1="http://portal.vidyo.com/user/v1_1">
         <ns1:total>1</ns1:total>
         <ns1:recorderID>1109054</ns1:recorderID>
         <ns1:recorderName>APPLICATION-AND-CONFERENCE</ns1:recorderName>
         <ns1:paused>false</ns1:paused>
         <ns1:webcast>false</ns1:webcast>
         <ns1:Entity>
            <ns1:entityID>0</ns1:entityID>
            <ns1:participantID>6611572</ns1:participantID>
            ...

Note that if recorderID is not present in the response, that it means that the conference is not being recorded.

So, at this stage we have all we need for stopping the recording:

Stop recording

For this we will use StopRecording API:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://portal.vidyo.com/user/v1_1">
   <soapenv:Header/>
   <soapenv:Body>
      <v1:StopRecordingRequest>
         <v1:conferenceID>4092486</v1:conferenceID>
         <v1:recorderID>1109054</v1:recorderID>
      </v1:StopRecordingRequest>
   </soapenv:Body>
</soapenv:Envelope>

Pause and Resume Recording

For pausing and resuming ongoing recording you can use PauseRecording and ResumeRecording APIs accordingly. Each of these requires the same ConferenceID and RecorderID parameters.

Search Recordings

Once the call has ended and recording has been completed, you typically may need to find this or any other recording file. All the recording are being stored on the VidyoReplay server, and it has its own set of APIs the allow search, update, and delete recordings. In cloud Vidyo environments the wsdl URI will look as the following:

https://{TenantName}.replay.platform.vidyo.io/replay/services/VidyoReplayContentManagementService?wsdl

To search for recording you will have to use RecordsSearch API. Example:

<s11:Envelope xmlns:s11='http://schemas.xmlsoap.org/soap/envelope/'>
  <s11:Body>
    <ns1:RecordsSearchRequest xmlns:ns1='http://replay.vidyo.com/apiservice'>
      <ns1:tenantName>test</ns1:tenantName>
      <ns1:roomFilter></ns1:roomFilter>
      <ns1:usernameFilter>vova</ns1:usernameFilter>
      <ns1:query></ns1:query>
      <ns1:recordScope></ns1:recordScope>
      <ns1:sortBy>date</ns1:sortBy>
      <ns1:dir>ASC</ns1:dir>
      <ns1:limit>100</ns1:limit>
      <ns1:start></ns1:start>
      <ns1:webcast></ns1:webcast>
    </ns1:RecordsSearchRequest>
  </s11:Body>
</s11:Envelope>

The above request filters recordings on VidyoReplay and returns those which are made on the tenant with name containing "test", recorded by user "vova", then sorts results by date in ascending order, and finally limits results number to 100.

As you can see, there are more filters to apply in request body that allows you to construct your search really precisely if needed.

Here what the response chunk looks like:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Body>
        <ns1:RecordsSearchResponse xmlns:ns1="http://replay.vidyo.com/apiservice">
            <ns1:allVideosCount>37</ns1:allVideosCount>
            <ns1:searchCount>9</ns1:searchCount>
            <ns1:myVideosCount>37</ns1:myVideosCount>
            <ns1:webcastCount>0</ns1:webcastCount>
            <ns1:newCount>37</ns1:newCount>
            <ns1:privateCount>0</ns1:privateCount>
            <ns1:organizationalCount>0</ns1:organizationalCount>
            <ns1:publicCount>0</ns1:publicCount>
            <ns1:records>
                <ns1:id>4908</ns1:id>
                <ns1:guid>bce75e5c-e850-5c4c-8f1e-c9b705eff420</ns1:guid>
                <ns1:tenantName>VidyoTest</ns1:tenantName>
                <ns1:userName>vova</ns1:userName>
                <ns1:userFullName>Vova Tareiev</ns1:userFullName>
                <ns1:dateCreated>2022-08-08T09:48:44.000+00:00</ns1:dateCreated>
                <ns1:dateCreatedString>Mon August 8 2022 09:48:44</ns1:dateCreatedString>
                <ns1:endTime>2022-08-08T09:50:32.000+00:00</ns1:endTime>
                <ns1:duration>01:48</ns1:duration>
                <ns1:resolution>HD</ns1:resolution>
                <ns1:framerate>30</ns1:framerate>
                <ns1:pin></ns1:pin>
                <ns1:recordScope>New</ns1:recordScope>
                <ns1:title>vova conference recording.</ns1:title>
                <ns1:roomName>vova</ns1:roomName>
                <ns1:fileLink>https://test.replay.platform.vidyo.io/replay/downloadRecording.do?file=bce75e5c-e850-5c4c-8f1e-c9b705eff420</ns1:fileLink>
                <ns1:recorderId>421aa0067</ns1:recorderId>
                <ns1:webcast>false</ns1:webcast>
                <ns1:tags></ns1:tags>
                <ns1:comments></ns1:comments>
                <ns1:locked>false</ns1:locked>
                <ns1:externalPlaybackLink>https://test.replay.platform.vidyo.io/replay/showRecordingExternal.html?key=IG3bxGBxhaiknT8</ns1:externalPlaybackLink>
                <ns1:fileSize>1493016</ns1:fileSize>
            </ns1:records>
            <ns1:records>
                <ns1:id>5748</ns1:id>
                <ns1:guid>37b8355d-e84c-53bc-8a53-478c15384f13</ns1:guid>
                <ns1:tenantName>VidyoTest</ns1:tenantName>
                <ns1:userName>vova</ns1:userName>
                <ns1:userFullName>Vova Tareiev</ns1:userFullName>
                <ns1:dateCreated>2022-09-22T10:46:04.000+00:00</ns1:dateCreated>
                <ns1:dateCreatedString>Thu September 22 2022 10:46:04</ns1:dateCreatedString>
                <ns1:endTime>2022-09-22T10:50:03.000+00:00</ns1:endTime>
                <ns1:duration>03:59</ns1:duration>
                <ns1:resolution>HD</ns1:resolution>
                <ns1:framerate>30</ns1:framerate>
                <ns1:pin></ns1:pin>
                <ns1:recordScope>New</ns1:recordScope>
                <ns1:title>vova conference recording.</ns1:title>
                <ns1:roomName>vova</ns1:roomName>
                <ns1:fileLink>https://test.replay.platform.vidyo.io/replay/downloadRecording.do?file=37b8355d-e84c-53bc-8a53-478c15384f13</ns1:fileLink>
                <ns1:recorderId>421aa0067</ns1:recorderId>
                <ns1:webcast>false</ns1:webcast>
                <ns1:tags></ns1:tags>
                <ns1:comments></ns1:comments>
                <ns1:locked>false</ns1:locked>
                <ns1:externalPlaybackLink>https://test.replay.platform.vidyo.io/replay/showRecordingExternal.html?key=b09ExKntmYcd9h9</ns1:externalPlaybackLink>
                <ns1:fileSize>3258210</ns1:fileSize>
            </ns1:records>
            [...]
        </ns1:RecordsSearchResponse>
    </soapenv:Body>
</soapenv:Envelope>

As you can see, the response contains some general information about total recording such as overall count and found number, as well as list of nodes - each for specific found recording.

Download Recording

There are two options of how you can download the recording. First is manual - you simply go to your VidyoReplay server Admin Manager (https://{TenantName}.replay.platform.vidyo.io/replay) and click a button to download.

Another options that you definitely will like better is to do this programmatically by simply using common tools such as wget or curl:

curl  -H "Authorization: Basic dGFyYXM6cXrlcjA2MjI=" "https://{TenantName}.replay.platform.vidyo.io/replay/downloadRecording.do?file=2ffdffd7-c66d-5ba0-9ff4-2810c54fc968" --output recording.mp4

where first argument is a header with your Base64-encoded auth, second is fileLink field from the RecordsSearch response above, and finally an output file name.

Last updated