Page Content
Stream Ended Reasons
The reason a stream ended (PhenixStreamEndedReason) may be an empty string, a system-generated reason, or a custom reason. A stream ended event usually leads to one of three actions:
-
Normal: continue with typical UX flow, no special action needed
-
Retry: try to stream again (but proceed to failure mode if recurs)
-
Unrecoverable: retry is not likely to succeed, escalate into UX or workflow
Custom reasons can be provided by users either via the API used to terminate the stream or via the dialog in the Customer Portal:

The reason is shown in the publishing history report:

Reason | Meaning | Recommended Action |
---|---|---|
empty string | Stream ended normally; normal flow of termination. | Normal |
abandoned | The publisher has stopped sending data. Video and audio has stopped flowing, or the stream is ended or has been killed by the backend. | Unrecoverable. If unexpected (mid-event), restart publisher. |
app-background | The stream was terminated due to the mobile app entering into the background | On client, monitor for return of focus and restart once focus is returned. |
byebye | The session ended normally, but ended before the streams ended. | Normal |
camera-track-failure | Issue with input signal source. | Unrecoverable. Check input stream status (especially hardware/camera) and restart once issues are resolved. |
capacity | The stream was terminated due to capacity limitations | Retry with exponential backoff |
censored | The stream was censored | Unrecoverable |
client-side-failure | Failure of the client to use the stream. | Retry - dispose of the publisher, check configuration and that UDP ports are open, and, if using web publisher, refresh browser before attempting to publish again. |
client:cleanup-after-failed-setup | A stream start was already called by the platform when the client app triggers it. | Normal |
client:start | A new stream was started, e.g., via .start(), and the prior session is being cleaned up before the new one starts. | Normal |
client:termination | Client requested that the stream be terminated. | Normal |
client:termination-on-window-unload | The user caused the window to unload (e.g., by closing a browser tab). | Normal |
connection-timeout | The requested connection was not successful within the allowed time window. This is frequently caused by firewall issues. | Retry, unrecoverable if consistent failures |
died | The session did not heartbeat. May be due to IP changes where UDP still works but TCP does not. | Unrecoverable. Check network status and restart once network issues are resolved. |
dispose | Room service is disposed of while a publish is still in progress. | Unrecoverable. Typically safe to ignore. |
ended | Stream ended normally. | Normal |
ExpressToRoomPublisher-RoomRejoined | Client recovered streams from a Room. | Normal |
failed | The stream failed. | Usually unrecoverable. |
idle-channel | The stream ended due to conditional publishing rules. | Normal |
ingest-ended | Source data (e.g., RTMP or encoder stream) has stopped coming into Phenix. | Normal |
ingest-error | Failure to detect streams. Input stream terminated without explicit end notification. Catch-all for abnormal stream termination. | Unrecoverable. Check connectivity and restart publisher. |
leave-channel | The client left the channel. | Normal |
maintenance | The server was stopped in the Portal by operator action | Unrecoverable. To determine who stopped the server, search for cluster.Stop in the logs, then identify the session associated with the cluster.Stop. Then look at the first logs. Google auth should log who authenticated the session. |
media-stream-ended | Client ended the media stream. | Unrecoverable. If unexpected (mid-event), investigate possible issue with camera or microphone that requires operator intervention and restart of publisher. |
multi-bitrate-failed | An issue with the stream has caused multi-bitrate transcoding to fail. | Unrecoverable |
not-ready | No stream is coming in, possibly due to slow publisher/overloaded or publisher offline while trying to publish. | Retry |
origin-ended or origin-stream-ended | The origin stream to which a connection is attempted is gone. | Unrecoverable |
pcast-stop | The SDK on the client stopped. | Normal |
pipe-ended | The input to Phenix ended (ingest issue), either due to an error, or no data, or a protocol-specific issue. Typically due to a get user media (GUM) issue such as another appliation appropriates camera input or tab is backgrounded. | Unrecoverable. If unexpcted (mid-event), restore pipe and refresh publisher. |
pipe-read-error | The input to Phenix encountered a fatal error. | Unrecoverable |
pipe-read-timeout | The media data pipeline received 0 bytes and timed out. | Retry |
room-rejoined | When rejoining a room, a new stream is published, and the stream published during the previous session is ended with this reason. | N/A |
session-error | Session failure, usually a re-authorization that failed due to reasons such as temporary network issues or an IP address change. | Retry. Check connectivity and restart publisher. |
stalled-audio | ||
streaming:transcoding-failed | An issue with the stream has caused transcoding to fail. | Unrecoverable. Restart publisher. |
transcoding-failed | An issue with the stream has caused transcoding to fail. | Unrecoverable |
unsupported-features | Features requested are not available for the stream; for example, attempting to try to subscribe to the time shift for a stream that doesn't have on-demand or time-shift-manifest. | Update features and retry or subscribe to different stream |
window-beforeunload | Page refreshed. | Retry |
window-unload | Page refreshed. | Retry |
v2023-12-04T20:36:01.000Z