Frequently Asked Questions
Which Photon product is the right one for me?
The answer to this depends mostly on your project and team.
Generally, we suggest to use either Fusion or Quantum, which are our most advanced client solutions.
For a quick overview, both product sheets contain the product picker "Quadrant":
Feel free to reach out to us for any questions.
Photon Cloud
Is Photon Cloud down?
Our Photon Cloud Status Page shows the current and past status per product.
We also announce status updates on our Discord servers.
Is there a default Photon Cloud region?
Actually, there is no default region. Clients know the Name Server address for the Photon Cloud. They are global and used to provide an up to date region list for the given AppId.
Clients will ping each region and identify the "Best Region", which has the lowest latency.
If none of the regions can be pinged successfully, the first region of the list is used.
Is it possible to disable some regions?
Yes.
It works by defining a "Region Allow List" without the "disabled" regions.
Read more about the "Dashboard Regions Filtering".
Can we get a list of all Cloud servers / IPs?
Such a list does not exist as the Photon Cloud is changing too frequently. Servers get added or removed and even new regions show up from time to time. This means it is impossible to add the Photon Cloud (as a whole) to an allow-list.
It is a different topic for an Enterprise Cloud. We'd discuss this via mail.
Apps within the Photon Industries Circle can rely on the host name for allow-listing: *.photonindustries.io. Make sure to use ns.photonindustries.io
as "Server" to connect to.
Photon Voice
How to save conversations into files?
We will answer this question in two parts:
First, incoming voice streams:
Photon Voice streams are uniquely identified using the pair: PlayerId and VoiceId.
So given this pair you can guess the origin of the remote voice stream: which player and which recorder.
You can subscribe to three events for remote streams:
VoiceConnection.RemoteVoiceAdded(RemoteVoiceLink)
: a new remote voice stream is created (started transmission) with information received.RemoteVoiceLink.FloatFrameDecoded(float[])
: an audio frame is received from a specific remote voice stream.RemoteVoiceLink.RemoteVoiceRemoved
: a remote voice stream has ended and is destroyed (stopped transmission).
If you want to capture an entire incoming remote voice stream, you can:
- Create and open file for the stream in
RemoteVoiceAdded
handler. - Write frame of audio data in
FloatFrameDecoded
handler. - Save and close the file in
RemoteVoiceRemoved
handler.
Or you can open and close file and update FloatFrameDecoded
accordingly on user input.
Second, outgoing voice streams:
For outgoing audio stream, you can create a custom processor by extending Voice.LocalVoiceAudio<T>.IProcessor
.
You can get the locally recorded audio frame in IProcessor.Process
.
A component attached to the same GameObject as the Recorder
is needed to intercept PhotonVoiceCreated
Unity message.
Inside that method, insert the custom processor in the local voice processing pipeline using LocalVoice.AddPreProcessor
(before transmission) or LocalVoice.AddPostProcessor
(after transmission).
See "WebRtcAudioDsp.cs" for an example.
How to use a custom audio source?
If you want the Recorder
to transmit audio produced by your own custom audio source:
First approach: data stream is driven by consumer
AudioClipWrapper
is a sample of this approach.
It streams audio clip assigned to Recorder.AudioClip
.
Create a class reading your audio source and implementing
Photon.Voice.IAudioReader
interface. e.g.MyAudioReaderSource
.Set
Recorder.SourceType
toFactory
in editor (or in code).Create an instance of your class somewhere during app initialization (before creation of
Recorder
):C#
// MyAudioReaderSource is just an example, replace with your own class name and constructor recorder.InputFactory = () => new MyAudioReaderSource();
As long as client is connected to a voice room and
Recorder
is transmitting,IAudioReader.Read(float[] buffer)
method will be called on your custom audio source instance (e.g.MyAudioReaderSource
).
Calls frequency and buffer size are adjusted to meet sampling rate returned byIAudioReader.SamplingRate
property of your custom audio source instance (e.g.MyAudioReaderSource
).
Second approach: data stream is driven by producer
ToneAudioPusher
in "AudioUtil.cs" is a sample of this approach.
In this case it may be more convenient to implement
Photon.Voice.IAudioPusher
interface instead. e.g.MyAudioPusherSource
.
You need to implementIAudioPusher.SetCallback
method only which mainly stores given callback.Set
Recorder.SourceType
toFactory
in editor (or in code).Create an instance of your class somewhere during app initialization (before creation of PhotonVoiceRecorder):
C#
// MyAudioPusherSource is just an example, replace with your own class name and constructor recorder.InputFactory = () => new MyAudioPusherSource();
During streaming, you simply call the callback set using
IAudioPusher.SetCallback
periodically (e.g. fromMonoBehaviour.OnAudioFilterRead
) with as many samples as you have.
Photon Voice will do all buffering work for you.
Billing
Do you have special offers for students, hobbyists or indies?
All our products have a free tier and a one-off entry-plan.
We also usually take part in Unity's asset store sales and occasionally give vouchers to lucky ones.
Can I combine more than one 100 CCU plan for a single Photon application?
No.
The 100 CCU plans are not stackable with each other. Only one can be applied per AppId.
They can be combined with paid subscriptions and contribute to the CCU for their duration.
In case you need more CCU for a single app, the next higher plan is the 500 CCU one.
If you subscribe to a monthly or yearly plan, then you will still keep the 100 CCUs for 12 months on top of / in addition to the CCU from your monthly/yearly plan.
How much traffic is included in my Photon plan and what happens if my app generates traffic beyond the included limit?
Photon Public Cloud and Premium Cloud plans include 3GB per CCU.
For example, a monthly plan with 1,000 CCUs includes 3 TB of traffic per month.
If your app generates more traffic, we will automatically send a heads up via email. You will receive an automatically generated overage invoice at the end of the month at your Photon account email address. The invoice amount is based on the following calculation:
Total traffic - included traffic = overage traffic (in GB)
Traffic is calculated with $0.05 / $0.10 per GB depending on the Photon Cloud region used. This invoice is automatically charged to your credit card on file.
What happens if the Peak CCU exceeds the booked CCU of my Photon Cloud plan?
If you subscribed to a 500 CCU / 1,000 CCU / 2,000 CCU plan, “CCU burst” is automatically activated for your application. The Photon Cloud will allow more CCU than you booked to deliver the best possible experience for your users.
Once the burst kicks in, you are obliged to upgrade to the required subscription tier within 48 hours, according to the terms agreed.
If you do not upgrade, we will send an “overage invoice” to your Photon account email address and charge each CCU above your subscribed plan with a fee of $0.75 / $1.00 (based on the used SDK) per CCU. This invoice is automatically charged to your credit card on file.
Photon charges the “Peak CCU”, which is the sum of the peak CCU per region added up in a given month. Please make sure to upgrade even if the usage decreases after reaching its peak to avoid overage charges.
Back to top