PushToTalk Framework: requesting clarifications

Hi, We have already developed a PTT app and it uses PTT entitlement for VOIP APNS. I am having some difficulties understanding how to integrate the pushToTalk framework. It would be very helpful if you kindly clarify my concerns.

  1. How will I get a channel UUID? When will it be created?
  2. Are the channel and session same?
  3. Suppose group A is active, and a high priority group B call comes in between, will group A channel be interrupted? How this scenario will be handled?
  4. I am assuming that, in the case of an incoming call, APNS will go to each participant of a channel, but to create an audio session and transmission, I will still need to communicate with my own server explicitly. Can you please share the detailed process?

Hi,

Question 1:

Your app gets to choose its own channel UUID when joining a channel. 🎉. A recommended way to do this is via [NSUUID UUID] to create guaranteed unique identifier.

Question 2:

Push to Talk "channels" are totally distinct from other iOS APIs that have a session concept. One distinction is that PTT "channels" can be connected for an indefinite duration, whereas Live Activities have a time limit. Live Activities cannot play audio in response to a push.

Question 3:

It's up to your app to handle conflict resolution when receiving audio from multiple "groups." While the system only allows your app to join/("register") a single channel UUID at a time, you are free to update the channel descriptor if you need to reflect a change in the system user interface to distinguish between the "groups" in your example. You can also adjust the active participant whenever you need to. (If you want, you can play your own custom sound tone or synthesized speech to make the user aware of a change in "groups." You can also make a custom App Intent to allow the user to change the active "group" via Siri. Just make sure to update the channel descriptor whenever the group changes.)

But be careful, as the user will expect that the channel name in the channel descriptor will be the "group" that would hear the outgoing transmission if the user presses the talk button. You don't want the user to accidentally transmit to the wrong group of people...

In short, your app is free to intermediate among multiple "groups", and decide what exact audio should play if there are conflicting/simultaneous incoming transmissions from various "groups", even though only a single channel UUID is registered with the system.

Question 4:

For this part, you bring your own implementation. You'll write your own custom code to handle playing incoming audio and transmitting outgoing audio. You'll send outgoing audio to your custom server, using your choice of serialization, encryption, and networking protocols.

You'll write your own custom code to handle an incoming APNS push. Upon receiving a push, you'll connect to your server to start receiving the stream of audio packets, decrypt them, and play them. When the incoming audio has ended, you'll set the active remote participant to nil. Make sure to use transport level encryption, at the very least, so that audio packets flowing through the internet aren't vulnerable to eavesdropping. (You can add your own end-to-end encryption of the audio packets as well. )

See also: https://developer.apple.com/forums/thread/707689

PushToTalk Framework: requesting clarifications
 
 
Q