Skip to content

LL-HLS Orchestrator never links Origin for a fresh WHIP stream ("Could not find Origin for the stream") — no config/version workaround found #2277

Description

@sachin-iam

Describe the bug
After a WHIP stream begins publishing successfully (confirmed ACTIVE by the server), the
Orchestrator sometimes never links an LL-HLS origin for it. The following line repeats
every ~2 seconds, sometimes for 30-70+ seconds, sometimes indefinitely until the server
process is restarted:

[Orchestrator] orchestrator.cpp:535 | Could not find Origin for the stream: [#default#live/<streamKey>]

No LL-HLS output is ever produced for the affected stream until (if ever) this resolves.
This is not tied to stream-key reuse — it reproduces on brand-new, never-before-used
stream keys as well.

To Reproduce
Steps to reproduce the behavior:

  1. Start OvenMediaEngine with a stock/default config — WHIP provider enabled, LLHLS
    publisher enabled, no ABR (single bypass-only rendition), OriginMode = true.
  2. Publish a stream via WHIP using plain ffmpeg (no custom application logic involved).
  3. Intermittently, check server logs — the Orchestrator fails to link an origin for the
    newly-registered stream even though the stream is otherwise ACTIVE and receiving media.
  4. See the "Could not find Origin for the stream" error repeating.

We were unable to find a 100%-reliable single trigger — it is intermittent rather than
tied to one specific action.

Expected behavior
The LL-HLS origin should link promptly (within the normal few-second WHIP-ingest-to-
origin-ready window) for every stream that is successfully ACTIVE.

Relevant configuration (Server.xml)

<Providers>
    <RTMP />
    <SRT />
    <WebRTC>
        <Timeout>30000</Timeout>
    </WebRTC>
</Providers>

<Publishers>
    <AppWorkerCount>1</AppWorkerCount>
    <StreamWorkerCount>8</StreamWorkerCount>
    <LLHLS>
        <OriginMode>true</OriginMode>
        <ChunkDuration>0.5</ChunkDuration>
        <PartHoldBack>1.5</PartHoldBack>
        <SegmentDuration>6</SegmentDuration>
        <SegmentCount>10</SegmentCount>
        <CreateDefaultPlaylist>true</CreateDefaultPlaylist>
        <DVR>
            <Enable>true</Enable>
            <TempStoragePath>/tmp/ome_dvr/</TempStoragePath>
            <MaxDuration>10800</MaxDuration>
        </DVR>
    </LLHLS>
    <WebRTC>
        <Timeout>30000</Timeout>
    </WebRTC>
</Publishers>

<!-- OutputProfile: single bypass-only rendition, no ABR/transcoding -->
<Video>
    <Name>bypass_video</Name>
    <Bypass>true</Bypass>
</Video>
<Audio>
    <Name>aac_audio</Name>
    <Codec>aac</Codec>
    <Bitrate>128000</Bitrate>
    <Samplerate>48000</Samplerate>
    <Channel>2</Channel>
    <BypassIfMatch><Codec>eq</Codec></BypassIfMatch>
</Audio>

Logs
Real excerpt from a production occurrence (2026-07-31) that eventually self-resolved:

[2026-07-31 13:12:40.741] E [SPLLHLS-t8090:45] Orchestrator | orchestrator.cpp:535  | Could not find Origin for the stream: [#default#live/sk_ded5c443...]
[2026-07-31 13:12:42.751] E [SPLLHLS-t8090:45] Orchestrator | orchestrator.cpp:535  | Could not find Origin for the stream: [#default#live/sk_ded5c443...]
(repeats every ~2s for 37 seconds)
[2026-07-31 13:13:17.888] I [OutboundWorker:56] LLHLS Publisher | llhls_stream.cpp:1409 | LLHlsStream::ComputeOptimalPartDuration() - Video track(0) FrameRate(30.067895)...
[2026-07-31 13:13:22.867] I [AW-LLHLS0:58]  LLHLS Publisher | llhls_stream.cpp:1768 | LLHlsStream(#default#live/sk_ded5c443...) - Ready to play : Part Hold Back = 3.213000

A separate occurrence the same session never self-resolved and required a full server restart — the stream stayed at outputs: [] indefinitely, confirmed via:

[2026-07-31 13:11:11.911] W [SPAPISvr-t8081:60] APIController | controller_base.h:179  | HTTP error occurred: [HTTP] Could not find the stream: [default/#default#live/sk_bb423de5...] (404)

Full OvenMediaEngine.log for this window available on request — trimmed here for readability.

Server (please complete the following information):

  • OS: Linux (Ubuntu, production VPS) and macOS (Docker Desktop) — reproduces on both
  • OvenMediaEngine Version: v0.20.5 (also reproduced on v0.20.0)
  • Branch: master (Docker image airensoft/ovenmediaengine:latest)

Player (please complete the following information):

  • Device: Not player-specific — failure occurs server-side before any output is produced
  • OS: N/A
  • Browser: N/A
  • Version: N/A

Additional context
Things we ruled out through direct testing: OriginMode true/false (both fail), DVR on/off
(no difference), audio codec/bypass settings (no difference), StreamWorkerCount/
AppWorkerCount ratio variations (no difference), ABR/transcoding load (reproduces with
ABR fully disabled), stream-key reuse (reproduces on fresh, never-reused keys too).

Related issues we checked but don't appear to match: #745 (different topology,
Origin/Edge + OVT), #1464 (different trigger — startPushPublishing between apps on the
same server, different error signature), #969 (closest in shape, but that report
self-recovers in ~1 minute; ours is frequently permanent until a server restart).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    needs more informationMore information is required to determine the nature of the issue

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions