Having good quality recordings of conversations is an important component of building a Podcasting tool or application. When it comes to finding a high-fidelity audio and video SDK, look no further. Dolby.io provides in-depth documentation and sample guides that will get your team up and running quickly.
In this post, we’ll be going over how we were able to build a simple podcast app leveraging both the Dolby.io Communications SDK and REST APIs. The app is made up of 3 fragments that are used to showcase multiple use cases of the SDK and REST APIs. As we built this app out, we see how fast it is to be able to set up a simple audio and video app.
Note: You can find the source code for the app in this GitHub repository.
REST APIs and Netlify
The Dolby.io REST APIs provide many different endpoints that allow you to authenticate, monitor, edit conference data, remix conferences, and stream audio. For this tool, we use the monitor conferencing and recording endpoints.
We set up our own Netlify serverless functions that respond to any request events that are made.
- getToken – returns authentication token for accessing services
- getConferencesInfo – returns live conference session details
- getRecordings – returns list of recorded sessions
The reason why we used Netlify was because it provided an elegant solution. We don’t have to set up a server; instead if we need functions that query any of the Dolby.io REST APIs and return it in a structure needed for our app. It is also extensible, we just create another serverless function file or each respective endpoint we need. Learn more about Netlify functions.
The typical flow of using Netlify:
- Create your serverless function
- Deploy to Netlify, which creates an API endpoint link
- Set up an HTTP networking library in Android (we used Volley)
- Use the endpoint url created from the Android fragment
For example, an endpoint may look like:
https://<your-app-name>.netlify.app/api/getConferencesInfo/
Your key/secret/token is also managed on the server rather than within the mobile app. The app is left to concentrate on the main features that are accessible through the three main fragments described below.
List of Live Conference Sessions
Starting with the left fragment (LiveSessionFragment.kt
), it’s used to display the list of conferences currently live by accessing the Conferences REST API endpoint. By accessing this REST API, we are able to retrieve all the important data needed for us to interact with the SDK. For example, the Conferences REST API is one of the most important ways to retrieve a conference’s ID. A conference ID in regards to the SDK is the key that enables a multitude of use cases such as using it to join, find, or delete a conference.

Here’s a sample response of the Get a list of conferences REST API.
{
"conferences": [
{
"alias": "Example",
"confId": "95f6f7b2-08ba-47c3-a9d3-c6df627d269c",
"dolbyVoice": true,
"duration": 6030,
"end": 1648619250662,
"key": "C_3zTHOOnw348zW0xbI57A==",
"live": false,
"mixerHlsStreaming": 0,
"mixerLiveRecording": 0,
"mixerRtmpStreaming": 0,
"nbListeners": 0,
"nbPstn": 0,
"nbUsers": 1,
"owner": {
"metadata": {
"externalId": "1",
"externalName": "Example",
"externalPhotoUrl": "https://avatars.dicebear.com/api/initials/Example.svg",
"ipAddress": "98.35.252.127"
},
"userId": "8eb673d0-2e47-3d89-99e1-217d6e83ecd7"
},
"presenceDuration": 5514,
"recordingDuration": 0,
"region": "us",
"start": 1648619244632,
"statistics": {
"maxParticipants": {},
"network": {
"maxRxBytesRate": {},
"maxRxPacketsRate": {},
"maxRxStreams": {},
"maxTxBytesRate": {},
"maxTxPacketsRate": {},
"maxTxStreams": {}
},
"weight": {
"maxDvcsWeight": 0,
"maxRouterWeight": 0
}
},
"type": "audio"
}
],
"first": "ApfcbGbSeGkTHgq03d-HdJx4CDgU-ZQgRlzvHejrEpOY83iumMcATU-bB8mZ18rhcVm2QoUkzOqRLKZWvYLulToS-oaOnOerZ0VuQmzYL2Z7YbqIXR93owSmK5rx36L-79J4bfUIsg",
"next": "_xps4HI1-zWHIhBxBTDUsA-mqZYykJQH7xVM797aGn_2sVSOtlzcUIbKzmwGPffxwtFvmoZ2wuA0EgpPWYm5fxFaYrnd4WmlOxGyE2T-4cwYGgS56NiWgTWusMUvCsRiGaNB1q8LXtnRs5Xa"
}
In the Podcast App, we just needed the confId and alias but when building your own apps, it’s nice to know that there’s other data that could be retrieved for all your conferences.
Create Podcast Session
As for the middle fragment (CreatePodcastFragment.kt), this was implemented so we could create a simple conference call that allowed users to toggle audio, video, record, and end the call.
This sample app’s UI can display up to 2 people’s video at one time. To optimally run this app, you’ll need to run it on 2 phones at once. That way when a new call is created, the other user can see the live conference session appear in the LiveSessionFragment.

Display Recordings
For the third fragment, this displays all the recordings that’ve been made during a podcast session.
Similar to LiveSessionFragment.kt, this fragment uses the Dolby.io REST API. In this case, we’ll be getting the recordings info to display in a list. Each row in the list corresponds to a recording made during a conference session. You can also click on the play button to download the recording to your own Android device!

Here’s an example JSON object from the Dolby.io recordings API. In our app’s case, we only needed the confId, duration, and alias so we could display that out in the app. If you’d like to learn more of what else is returned in the JSON object, view the Recording API docs here.
{
"recordings": [
{
"confId": "f7c9fa93-f96a-4baa-89ac-ce07cd701aed",
"ts": 1650500185543,
"duration": 2753,
"region": "ca",
"alias": "Avengers meeting",
"mix": {
"mp3": 34560
},
"audio": {
"region": "ca",
"records": [
{
"startTime": 1650500180071,
"duration": 2740,
"size": 34560,
"fileName": "record_1650500180070_conf_f7c9fa93-f96a-4baa-89ac-ce07cd701aed.mp3"
}
],
"duration": 2740,
"size": 34560,
"fileName": "record_full_conf_f7c9fa93-f96a-4baa-89ac-ce07cd701aed.mp3"
}
}
]
}
Like the way we retrieved the info for the live conferences, we’ll also need the confId in this case. Dolby.io provides the ability to retrieve either an MP3 or MP4 recording of the conference call by enabling it in your dashboard. In our case, we provide downloading a recordings in MP3 format.
Conclusion
In this app, we demonstrated multiple use cases of the Android Communications SDK and REST APIs. For the Communications SDK, we demonstrated how to create & join a call, toggle video & audio, and end a session.
As for the REST APIs, we showed how to query the conference and recordings information. We used the conference info to join a live conference and the recording info was used for getting an MP3 download.