Skip to content

SigmaStar SSC30KQ /play_audio streaming POST / low-latency talkback support. #2141

@Den9Levchenko

Description

@Den9Levchenko

Hello OpenIPC/Majestic team,

I’m using an OpenIPC camera with the following hardware/firmware:

SoC: ssc30kq / SigmaStar Infinity6E family
Sensor: IMX335
Flash: 16 MB NOR
Firmware: 2.6.05.21-ultimate
Build: openipc-ssc30kq

Audio input works correctly over RTSP/WebRTC. I can receive camera microphone audio together with video.

Audio output also works electrically and through Majestic when using /play_audio with a pre-recorded PCM file. The camera has AUDIO_OUT, connected to a PAM8403 amplifier and speaker.

Example working command:

ffmpeg -f lavfi -i "sine=frequency=1000:duration=5" -filter:a "volume=0.95" -ac 1 -ar 8000 -f s16le test.pcm

curl -u root:PASSWORD
-H "Content-Type: application/octet-stream"
--data-binary "@test.pcm"
http://CAMERA_IP/play_audio

Majestic logs show that playback is accepted and sent to SigmaStar AO:

Audio playback: 78KB
[MI_AO_IMPL_SendFrame:2716] Strat pcm out success!!!

AO is initialized at boot:

client [PID] connected, module:ao
[_MI_AO_Init:1248] Init Ao Gain.
Output: 8kHz, 8dB

So the basic output path works:

/play_audio → Majestic → SigmaStar MI_AO → AUDIO_OUT → amplifier → speaker

The problem is that /play_audio appears to behave as a file/clip upload endpoint. It works when the full PCM file is uploaded, but it does not work as a live streaming endpoint for microphone talkback.

Tests attempted:

curl --data-binary @test.pcm http://CAMERA_IP/play_audio
Works.
Python requests.post(..., data=generator) streaming 8 kHz mono s16le PCM from laptop microphone
Does not play during streaming.
Stopping the Python streaming request with Ctrl+C
Still does not play anything afterward.
go2rtc WebRTC two-way audio
Browser microphone reaches go2rtc, but the OpenIPC RTSP probe only shows camera-side receive media:
video, recvonly, H265
audio, recvonly, OPUS/48000/2

There is no RTSP/ONVIF audio backchannel advertised, so go2rtc has no native return audio path to the camera speaker.

I also checked the camera filesystem. The MI_AO kernel/device side exists:

/dev/mi_ao
/proc/mi_modules/mi_ao/mi_ao0
/lib/modules/4.9.84/sigmastar/mi_ao.ko

But there is no separate user-space libmi_ao.so or CLI AO player available. Majestic appears to have the MI_AO userspace functions linked internally. strings /usr/bin/majestic shows symbols like:

/play_audio
MI_AO_SetPubAttr
MI_AO_Enable
MI_AO_EnableChn
MI_AO_SendFrame
MI_AO_SetVolume
MI_AO_SetMute
Request

Could Majestic support low-latency streaming talkback on SigmaStar SSC30KQ / Infinity6E?

Possible implementation ideas:

Make /play_audio support streaming/chunked HTTP POST, where incoming PCM frames are sent immediately to MI_AO_SendFrame instead of waiting for a complete uploaded body.
Add a separate endpoint, for example:
/play_audio_stream

that accepts continuous raw PCM:

8000 Hz
mono
signed 16-bit little-endian PCM

and feeds frames directly into MI_AO.

Optionally support WebSocket or UDP PCM input for lower latency:
/ws_audio_out
udp://camera:PORT

Expected use case:

Browser/laptop microphone
→ 8 kHz mono s16le PCM
→ Majestic streaming audio input endpoint
→ SigmaStar MI_AO
→ camera AUDIO_OUT
→ external amplifier/speaker

This would allow true two-way audio/talkback on SigmaStar OpenIPC cameras that already have working AUDIO_OUT hardware but do not expose an RTSP/ONVIF audio backchannel.

Thanks!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions