mirror of
https://github.com/legop3/MultiRoombaRover.git
synced 2026-09-17 18:10:47 -04:00
trying a new method
This commit is contained in:
Vendored
BIN
Binary file not shown.
Vendored
BIN
Binary file not shown.
@@ -20,27 +20,11 @@ VIDEO_FPS="${VIDEO_FPS:-30}"
|
|||||||
VIDEO_BITRATE="${VIDEO_BITRATE:-3000000}"
|
VIDEO_BITRATE="${VIDEO_BITRATE:-3000000}"
|
||||||
AUDIO_ENABLE="${AUDIO_ENABLE:-0}"
|
AUDIO_ENABLE="${AUDIO_ENABLE:-0}"
|
||||||
AUDIO_DEVICE="${AUDIO_DEVICE:-plughw:0,0}"
|
AUDIO_DEVICE="${AUDIO_DEVICE:-plughw:0,0}"
|
||||||
AUDIO_RATE="${AUDIO_RATE:-48000}"
|
AUDIO_CODEC="pcm_s16le"
|
||||||
AUDIO_CHANNELS="${AUDIO_CHANNELS:-1}"
|
# Keep the audio path simple for the Pi Zero; we hardcode a single PCM profile.
|
||||||
AUDIO_BITRATE="${AUDIO_BITRATE:-24000}"
|
AUDIO_RATE=16000
|
||||||
AUDIO_CODEC="${AUDIO_CODEC:-pcm_mulaw}"
|
|
||||||
|
|
||||||
# Normalize device/rate to match the HAT capture; plughw handles any minor conversions.
|
|
||||||
AUDIO_DEVICE="plughw:0,0"
|
|
||||||
AUDIO_CHANNELS=1
|
AUDIO_CHANNELS=1
|
||||||
# Defaults chosen to keep Pi Zero CPU low. Opus can be enabled by setting AUDIO_CODEC=libopus.
|
AUDIO_DEVICE="plughw:0,0"
|
||||||
if [[ "${AUDIO_CODEC}" == "libopus" ]]; then
|
|
||||||
AUDIO_RATE=16000
|
|
||||||
AUDIO_BITRATE=16000
|
|
||||||
else
|
|
||||||
# G.711 mu-law (or A-law if AUDIO_CODEC=pcm_alaw): very low CPU, 8 kHz mono, ~64 kbps.
|
|
||||||
AUDIO_CODEC="pcm_mulaw"
|
|
||||||
AUDIO_RATE=8000
|
|
||||||
AUDIO_BITRATE=64000
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Disable audio streaming for now; only video will be published.
|
|
||||||
AUDIO_ENABLE=0
|
|
||||||
# Flip the camera 180deg (supported by rpicam-vid/libcamera-vid)
|
# Flip the camera 180deg (supported by rpicam-vid/libcamera-vid)
|
||||||
FLIP_ARGS=(--rotation 180)
|
FLIP_ARGS=(--rotation 180)
|
||||||
|
|
||||||
@@ -64,9 +48,6 @@ else
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Flip using the native rotation flag (0/180 supported per rpicam-vid --help).
|
|
||||||
FLIP_ARGS=(--rotation 180)
|
|
||||||
|
|
||||||
run_pipeline() {
|
run_pipeline() {
|
||||||
if [[ "${AUDIO_ENABLE}" -eq 1 ]]; then
|
if [[ "${AUDIO_ENABLE}" -eq 1 ]]; then
|
||||||
# Try audio + video; if audio device is missing, fallback to video-only.
|
# Try audio + video; if audio device is missing, fallback to video-only.
|
||||||
@@ -101,11 +82,9 @@ run_pipeline() {
|
|||||||
-i "${AUDIO_DEVICE}" \
|
-i "${AUDIO_DEVICE}" \
|
||||||
-c:v copy \
|
-c:v copy \
|
||||||
-c:a "${AUDIO_CODEC}" \
|
-c:a "${AUDIO_CODEC}" \
|
||||||
-b:a "${AUDIO_BITRATE}" \
|
|
||||||
$( [[ "${AUDIO_CODEC}" == "libopus" ]] && echo "-compression_level 0 -application voip -frame_duration 60" ) \
|
|
||||||
-ac:a "${AUDIO_CHANNELS}" \
|
|
||||||
-ar:a "${AUDIO_RATE}" \
|
-ar:a "${AUDIO_RATE}" \
|
||||||
-af "$( [[ "${AUDIO_CODEC}" == "libopus" ]] && echo "pan=1c|c0=c0," )volume=20dB" \
|
-ac:a "${AUDIO_CHANNELS}" \
|
||||||
|
-af "volume=20dB" \
|
||||||
-flush_packets 1 \
|
-flush_packets 1 \
|
||||||
-f mpegts \
|
-f mpegts \
|
||||||
"${PUBLISH_URL}"
|
"${PUBLISH_URL}"
|
||||||
|
|||||||
@@ -204,8 +204,10 @@ VIDEO_WIDTH=1280
|
|||||||
VIDEO_HEIGHT=720
|
VIDEO_HEIGHT=720
|
||||||
VIDEO_FPS=30
|
VIDEO_FPS=30
|
||||||
VIDEO_BITRATE=2000000
|
VIDEO_BITRATE=2000000
|
||||||
AUDIO_ENABLE=1
|
|
||||||
AUDIO_ENABLE=0
|
AUDIO_ENABLE=0
|
||||||
|
AUDIO_DEVICE=plughw:0,0
|
||||||
|
AUDIO_RATE=16000
|
||||||
|
AUDIO_CHANNELS=1
|
||||||
ENV
|
ENV
|
||||||
chown roverd:roverd /var/lib/roverd/video.env
|
chown roverd:roverd /var/lib/roverd/video.env
|
||||||
chmod 0640 /var/lib/roverd/video.env
|
chmod 0640 /var/lib/roverd/video.env
|
||||||
|
|||||||
+1
-1
@@ -143,7 +143,7 @@ func LoadConfig(path string) (*Config, error) {
|
|||||||
Audio: AudioConfig{
|
Audio: AudioConfig{
|
||||||
CaptureEnabled: false,
|
CaptureEnabled: false,
|
||||||
CaptureDevice: "plughw:0,0",
|
CaptureDevice: "plughw:0,0",
|
||||||
SampleRate: 48000,
|
SampleRate: 16000,
|
||||||
Channels: 1,
|
Channels: 1,
|
||||||
Bitrate: 24000,
|
Bitrate: 24000,
|
||||||
TTSEnabled: false,
|
TTSEnabled: false,
|
||||||
|
|||||||
+14
-2
@@ -25,8 +25,20 @@ func UpdatePublisherEnv(media MediaConfig, audio AudioConfig) error {
|
|||||||
fmt.Fprintf(&buf, "VIDEO_HEIGHT=%d\n", media.VideoHeight)
|
fmt.Fprintf(&buf, "VIDEO_HEIGHT=%d\n", media.VideoHeight)
|
||||||
fmt.Fprintf(&buf, "VIDEO_FPS=%d\n", media.VideoFPS)
|
fmt.Fprintf(&buf, "VIDEO_FPS=%d\n", media.VideoFPS)
|
||||||
fmt.Fprintf(&buf, "VIDEO_BITRATE=%d\n", media.VideoBitrate)
|
fmt.Fprintf(&buf, "VIDEO_BITRATE=%d\n", media.VideoBitrate)
|
||||||
// Disable mic streaming; audio is handled locally for TTS only.
|
audioDevice := audio.CaptureDevice
|
||||||
fmt.Fprintf(&buf, "AUDIO_ENABLE=0\n")
|
if audioDevice == "" {
|
||||||
|
audioDevice = "plughw:0,0"
|
||||||
|
}
|
||||||
|
if audio.SampleRate <= 0 {
|
||||||
|
audio.SampleRate = 16000
|
||||||
|
}
|
||||||
|
if audio.Channels <= 0 {
|
||||||
|
audio.Channels = 1
|
||||||
|
}
|
||||||
|
fmt.Fprintf(&buf, "AUDIO_ENABLE=%d\n", boolToInt(audio.CaptureEnabled))
|
||||||
|
fmt.Fprintf(&buf, "AUDIO_DEVICE=%s\n", audioDevice)
|
||||||
|
fmt.Fprintf(&buf, "AUDIO_RATE=%d\n", audio.SampleRate)
|
||||||
|
fmt.Fprintf(&buf, "AUDIO_CHANNELS=%d\n", audio.Channels)
|
||||||
if err := os.WriteFile(publisherEnvPath, buf.Bytes(), 0o640); err != nil {
|
if err := os.WriteFile(publisherEnvPath, buf.Bytes(), 0o640); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ cameraServo:
|
|||||||
audio:
|
audio:
|
||||||
captureEnabled: false
|
captureEnabled: false
|
||||||
captureDevice: plughw:0,0
|
captureDevice: plughw:0,0
|
||||||
sampleRate: 48000
|
sampleRate: 16000
|
||||||
channels: 1
|
channels: 1
|
||||||
bitrate: 24000
|
bitrate: 24000
|
||||||
ttsEnabled: false
|
ttsEnabled: false
|
||||||
|
|||||||
Reference in New Issue
Block a user