송출 장비 설정

push 스트림은 카메라·NVR·인코더·중계기가 CastLine 으로 영상을 보내는 방식입니다. 공유기 뒤에 있어도 별도 포트포워딩이 필요 없습니다(CCTV 연결 방식).

아래 예시의 <slug>(고객사 주소 이름), <code>(스트림 코드), pk_…(송출 키)는 콘솔 스트림의 송출 설정 탭에 표시되는 값으로 바꿉니다. 송출 키 원문은 소유자가 열람을 눌러야 보이며, 재발급하면 이전 키로 보내던 장비는 끊깁니다.

OBS Studio — RTMP

설정 → 방송 → 서비스 사용자 지정을 고르고 서버와 스트림 키를 넣습니다.

서버 (OBS "서버")
rtmp://castline.dotoritos.net:1935/c/<slug>
스트림 키 (OBS "스트림 키")
<code>?token=pk_…

서버·키를 한 줄로 받는 장비(NVR 의 “RTMP 주소” 칸 등)에는 전체 URL 을 넣습니다.

RTMP 전체 URL
rtmp://castline.dotoritos.net:1935/c/<slug>/<code>?token=pk_…
  • 권장: 키프레임 간격 1~2초, 영상 H.264, 음성 AAC.
  • RTMP 로는 H.265 를 보낼 수 없는 장비가 많습니다. H.265 카메라는 아래 SRT 를 쓰세요.

OBS Studio 30 이상 — WebRTC (WHIP)

설정 → 방송 → 서비스 WHIP 을 고르고 서버와 Bearer Token 을 넣습니다.

WHIP 서버 (OBS 30 이상, "WHIP")
https://rtc.castline.dotoritos.net/c/<slug>/<code>/whip
Bearer Token
pk_…

WHIP 은 지연이 가장 짧습니다. OBS 는 WHIP 음성을 Opus 로 보내며, 웹 플레이어(WebRTC·HLS)에서 그대로 재생됩니다.

SRT (카메라·인코더·ffmpeg)

SRT 는 손실이 있는 회선에서 안정적이고 H.265 도 그대로 보낼 수 있습니다. 장비의 SRT 주소 칸에 넣습니다.

SRT 송출 URL
srt://castline.dotoritos.net:8890?streamid=publish:c/<slug>/<code>:castline:pk_…&pkt_size=1316

스트림에 SRT passphrase 를 설정했다면 끝에 &passphrase= 를 붙입니다(10~79자).

SRT 송출 URL (passphrase 를 설정한 스트림)
srt://castline.dotoritos.net:8890?streamid=publish:c/<slug>/<code>:castline:pk_…&pkt_size=1316&passphrase=<passphrase>

장비에 “Stream ID” 칸이 따로 있으면 streamid= 뒤의 값(publish:c/<slug>/<code>:castline:pk_…)만 그 칸에 넣고, 주소 칸에는 srt://호스트:포트 만 넣습니다.

RTSP 로 보내기

카메라의 “RTSP 푸시” 기능이나 ffmpeg 에서 씁니다. TCP 전송만 지원합니다.

RTSP 송출 URL (TCP)
rtsp://castline.dotoritos.net:8554/c/<slug>/<code>?token=pk_…
파일·다른 장비를 RTSP 로 송출 (TCP)
ffmpeg -re -i input.mp4 -c copy -f rtsp -rtsp_transport tcp "rtsp://castline.dotoritos.net:8554/c/<slug>/<code>?token=pk_…"

현장 중계기 (ffmpeg)

카메라가 RTSP·HTTP 로만 영상을 줄 때, 같은 LAN 의 PC·미니PC·라즈베리파이에서 영상을 받아 CastLine 으로 보냅니다. 카메라 비밀번호는 중계기에만 있고 CastLine 에 저장되지 않습니다.

카메라 출력방법
RTSP (H.264)트랜스코딩 없이 그대로 RTMP 로
RTSP (H.265)그대로 SRT 로 (-f mpegts)
HTTP MJPEG (/video.mjpg 등)중계기에서 H.264 로 인코딩 (720p 기준 라즈베리파이 4 이상 권장, 음성 없음)
HTTP-FLV (H.264)트랜스코딩 없이 그대로
JPEG 스냅샷만초당 1장 수준의 저속 영상. 실시간 영상이 필요하면 카메라의 RTSP 출력을 쓰세요
카메라 RTSP (H.264) → RTMP, 트랜스코딩 없음
ffmpeg -rtsp_transport tcp -i "rtsp://<계정>:<비밀번호>@<카메라>/<경로>" -c copy -f flv "rtmp://castline.dotoritos.net:1935/c/<slug>/<code>?token=pk_…"
카메라 RTSP (H.265) → SRT 권장
ffmpeg -rtsp_transport tcp -i "rtsp://<계정>:<비밀번호>@<카메라>/<경로>" -c copy -f mpegts "srt://castline.dotoritos.net:8890?streamid=publish:c/<slug>/<code>:castline:pk_…&pkt_size=1316"
HTTP MJPEG 카메라 → H.264 인코딩 후 RTMP (음성 없음)
ffmpeg -f mjpeg -i "http://<계정>:<비밀번호>@<카메라>/video.mjpg" -c:v libx264 -preset veryfast -tune zerolatency -pix_fmt yuv420p -g 50 -an -f flv "rtmp://castline.dotoritos.net:1935/c/<slug>/<code>?token=pk_…"
HTTP-FLV (H.264) 카메라 → RTMP, 트랜스코딩 없음
ffmpeg -i "http://<카메라>/live.flv" -c copy -f flv "rtmp://castline.dotoritos.net:1935/c/<slug>/<code>?token=pk_…"
JPEG 스냅샷만 주는 카메라 → 초당 1장 저속 영상
while true; do curl -s "http://<카메라>/snapshot.jpg"; sleep 1; done | ffmpeg -f image2pipe -framerate 1 -i - -c:v libx264 -r 5 -g 10 -pix_fmt yuv420p -f flv "rtmp://castline.dotoritos.net:1935/c/<slug>/<code>?token=pk_…"

현장 중계기 (MediaMTX)

카메라가 여러 대이거나 중계기에서도 영상을 확인하고 싶으면 중계기에 MediaMTX 를 설치하고, 카메라가 연결되면 CastLine 으로 보내도록 설정합니다.

중계기 mediamtx.yml (카메라 여러 대를 한 PC 에서)
# 현장 중계기(PC·미니PC·라즈베리파이)의 mediamtx.yml 일부
# 카메라마다 path 하나. 카메라 비밀번호는 이 파일에만 있고 CastLine 에는 저장되지 않습니다.
# ffmpeg 가 설치되어 있어야 합니다(도커 이미지 bluenviron/mediamtx:1.21.1-ffmpeg 에는 포함).
paths:
  cam1:
    source: rtsp://<계정>:<비밀번호>@<카메라>/<경로>
    rtspTransport: tcp
    sourceOnDemand: no
    runOnReady: >
      ffmpeg -rtsp_transport tcp -i rtsp://127.0.0.1:8554/cam1
      -c copy -f flv "rtmp://castline.dotoritos.net:1935/c/<slug>/<code>?token=pk_…"
    runOnReadyRestart: yes

카메라마다 CastLine 에 push 스트림을 하나씩 만들고, cam1·cam2 … path 마다 그 스트림의 <code> 와 송출 키를 넣습니다.

부팅 시 자동 실행·끊기면 재시작

중계기는 전원이 나갔다 들어오거나 회선이 끊겨도 스스로 다시 보내야 합니다. 리눅스(라즈베리파이 포함)는 systemd 서비스로 등록합니다.

부팅 시 자동 실행·끊기면 재시작 (/etc/systemd/system/castline-cam1.service)
[Unit]
Description=CastLine 중계 (cam1)
After=network-online.target
Wants=network-online.target

[Service]
ExecStart=/usr/bin/ffmpeg -rtsp_transport tcp -i "rtsp://<계정>:<비밀번호>@<카메라>/<경로>" -c copy -f flv "rtmp://castline.dotoritos.net:1935/c/<slug>/<code>?token=pk_…"
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

# 적용: sudo systemctl daemon-reload && sudo systemctl enable --now castline-cam1

Windows 중계기는 작업 스케줄러에서 “컴퓨터 시작 시” 실행 + “실패하면 다시 시작”을 설정합니다.

잘 안 될 때

  • 콘솔 스트림 상세의 이벤트에 송출 거부(stream.publish_denied)가 보이면 송출 키·<code> 가 틀렸거나 등급이 그 입력 프로토콜을 허용하지 않는 경우입니다.
  • 스트림이 꺼짐 상태면 송출이 거부됩니다. 콘솔에서 먼저 켜세요.
  • 웹 플레이어에서 소리가 안 나면 재배포 URL 사용의 코덱 호환 표를 확인하세요.