Skip to content

Live MPEG-TS: DTS-HD audio mislabeled as mp3 → bridge never produces audio, playback stalls after first frame #641

Description

@Simpendaal

What happened?

I load a live MPEG-TS channel whose audio PID arrives with an unknown codec at open time; the probe then settles on mp3. The payload is actually DTS-HD (core sync 7F FE 80 01 + extension substream 64 58 20 25). Every packet fails in mp3float with Header missing, the AudioBridge never emits a packet (fed=64 decoded=0 rejected=64), and the session sits in waitingToPlay / stalls after the first frame. The sample rate / channel count the bridge is initialised with changes per run (16000, 32000, 44100 Hz mono, once 48000 stereo), which also points at misdetection. Other players (and KSPlayer after I added byte sniffing on my side) play the same channel with sound. I expected the engine to recognise the real codec, or at least fall back to video-only instead of stalling.

Steps to reproduce

engine.load(url:) on the live .ts stream of this channel (IPTV provider, channel "24/7: Breaking Bad"; I can share the URL privately)
Observe [Demuxer] stream[1] type=audio codec=mp3 0x0 and continuous [mp3float] Header missing
AudioBridge logs AE#396 (no encoded audio), native host stalls

AetherEngine version or commit SHA

7.15.1

Host app

Custom / my own integration

Platform

tvOS

OS version

27

Device / chip

ATV 4K Gen3

Playback path

Native AVPlayer

Source media (for playback bugs)

Source media (for playback bugs) Live MPEG-TS, H.264 High 4.1 1920x1080 23.976, audio PID signalled/probed as mp3 but carrying DTS-HD: core frame 2012 B (48 kHz, 5 ch, 512 samples) + extension 1728 B = 3740 B per frame. First audio bytes: 7f fe 80 01 fc 3c 7d b2 77 00 0d 3b 80 09 ef 7b.

Error codes / log lines

[Demuxer]   stream[1] type=audio codec=mp3 0x0
[HLSVideoEngine] audio: codec=mp3 (bridge required), decoding + FLAC re-encode
[AudioBridge] init: mode=surroundCompat encoder=flac srcCodec=86017 sampleRate=32000 sourceChannels=1 encoderChannels=1 bitRate=VBR (source=container, container=1, decoder=1)
Last message repeated 2178 times: [mp3float @ 0x133880340] [error] Header missing
[AudioBridge] ERROR: AE#396 the bridge has produced no encoded audio at all (mode=surroundCompat, encoder=flac, frame=2304): fed=64 decoded=0 enqueued=0 emitted=0 rejected=64 lastDecodeError=Invalid data found when processing input (-1094995529).
[NativeAVPlayerHost] #1 playbackStalled

Anything else

On the KSPlayer side I fixed this by collecting ~24 KB of the rejected audio payload, looking for a chain of ≥3 valid frames per candidate codec (ADTS, LATM, AC3, E-AC3, MP2, MP3, DTS/DTS-HD where the frame length is the distance to the next core sync), and reopening the decoder with the detected codec plus its parser. Timestamps of the parser-split frames then needed smoothing (±24 ms jitter otherwise). Happy to share the code or a raw audio sample.

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

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions