편집용 오디오를 나누려면 게임·마이크·음악을 독립 트랙에 남겨야 합니다. 그렇다고 방송자에게 OBS의 체크박스를 전부 다시 맞추게 하면 기존 본방이나 녹화의 소리가 달라질 수 있습니다. 자동 배정은 설정을 대신해 주는 기능인 동시에 사용자가 쌓아 둔 설정을 바꾸는 기능이었습니다.
저는 서버가 기대하는 트랙 구성과 사용 흐름을 정하고, OBS 담당 팀원과 기존 설정 보호·복원·순간 표시의 동작을 검토했습니다. PR #195의 구현과 OBS 실측은 jaehwan-space가 맡았습니다. 이 과정에서는 자동 배정을 켜는 것만큼 끈 뒤 원래 설정으로 돌아오는 것을 확인해야 했습니다.
첫 오디오가 본방이려면 믹서 번호를 고정할 수 없었습니다
서버는 첫 오디오에 본방 믹스가 들어오기를 기대합니다. 그런데 방송자가 본방 트랙을 2번으로 골랐다면, 믹서 0을 고정해 만든 첫 오디오는 실제 본방과 다를 수 있습니다. 순서상 첫 칸과 사용자가 선택한 본방은 같은 개념이 아니었습니다.
팀은 믹서 번호와 무관하게 본방 AAC 인코더를 공유하고, AAC가 아니라면 같은 본방 믹서에 대응하는 대체 인코더를 만들도록 보완했습니다. 서버에 도착하는 순서는 고정하되, 그 순서의 첫 항목을 만드는 플러그인은 사용자 설정을 따라야 했습니다. OBS 다중 트랙 가이드의 믹스와 개별 트랙 구분도 이 동작을 이해하는 데 도움이 됩니다.
자동 배정은 동의 후 적용하고 컬렉션별로 되돌리도록 했습니다
자동 배정은 오디오를 내는 소스를 후보로 삼고 이전 배정을 우선 활용하도록 했습니다. 소리가 없는 오버레이가 자리를 차지하거나, 같은 소스가 방송할 때마다 다른 트랙으로 이동하지 않도록 하기 위해서입니다. 본방·VOD 트랙은 보호하고, 방송·녹화·리플레이 버퍼 사용 중에는 새 배정으로 즉시 덮어쓰지 않게 했습니다.
| 상황 | 선택한 동작 | 이유 |
|---|---|---|
| 첫 사용 | 기본 꺼짐, 사용자 동의 후 활성화 | 기존 녹화 구성을 바꿀 수 있음 |
| 다시 사용 | 이전 배정 우선 활용 | 소스와 스템 대응의 불필요한 이동 방지 |
| 장면 컬렉션 전환 | 컬렉션별 백업 | 서로 다른 원래 체크를 따로 보존 |
| 자동 배정 해제 | 해당 컬렉션의 체크 복원 | 이전 작업 환경으로 복귀 |
백업이 하나 있다는 것만으로는 부족했습니다. A 컬렉션에서 저장한 설정을 B에 복원하면 또 다른 설정 변경이 되기 때문입니다. 팀은 A/B를 전환한 뒤 각각 자동 배정을 껐을 때 원래 체크로 돌아오는지 확인했습니다. 백업 범위·잠금·보호 트랙을 깨뜨리는 결함 주입 테스트도 남겼습니다.
본방 트랙 2와 실제 소리를 넣어 결과를 대조했습니다
팀 실험은 OBS 32.2.2 macOS → SRT → 로컬 MediaMTX 녹화 조건에서 진행했습니다. 440Hz와 1,000Hz 소스를 켜고 방송 중 2,500Hz 소스를 추가했습니다. 파일과 목록에서 트랙 개수를 세는 검사에 실제 대역 음량 검사를 더했습니다.
| 검사 | 관측 |
|---|---|
| ffprobe | 영상 1개 + AAC 6개 |
| HLS 목록 | 대체 오디오 6개 |
| 스템의 목표 대역 | −24.1dB |
| 빈 트랙 | −91.0dB |
| 본방 트랙 2 | 첫 오디오에 본방의 440Hz 보존 |
| 컬렉션 A/B | 각각의 원래 체크 복원 |
본방 트랙 2에서도 첫 오디오에 440Hz가 남았다는 결과는 단순히 트랙 여섯 개를 만들었다는 것보다 구체적입니다. 실제 사용자 설정을 따라 본방을 보존하는지 확인한 것입니다. 다른 대역의 −47~−57dB는 측정 필터 누설이므로 원음 혼입률로 해석하지 않았습니다. 실제 음악 제거의 청감 품질도 별도로 확인해야 합니다.
빈 트랙에도 무음 패킷은 계속 필요했습니다. 패킷을 아예 멈추면 모든 트랙을 기다리는 출력 경로가 진행하지 못할 수 있기 때문입니다. 무음은 트랙이 없어지는 상태와 다르게 처리했습니다.
순간 표시도 클릭 한 번과 서버 저장 한 번을 맞춰야 했습니다
같은 PR의 하이라이트 순간 표시에는 다른 종류의 중복 문제가 있었습니다. 사용자가 한 번 눌렀지만 전송 결과를 받지 못한 경우, 새 식별자로 재시도하면 같은 순간이 여러 개 생길 수 있습니다. 그래서 같은 eventId로 재시도하고 만료와 영구 오류를 구분하는 계약을 뒀습니다.
플러그인의 버튼만으로 이 기능이 끝나지는 않습니다. Clip의 저장 창구와 방송 생명주기 이벤트가 먼저 연결돼야 합니다. 입력을 보낸 상태와 서버에 표시가 저장된 상태를 구별해 통합해야 할 부분입니다.
자동 배정은 기존 녹화 전용 트랙과도 같은 OBS 체크를 쓰므로, 녹화 방식에 따라 꺼 두는 선택이 필요합니다. 검증 범위 역시 로컬 macOS이며 Windows와 실제 치지직 송출까지 포함하지 않습니다.
편집 입력을 자동으로 만드는 과정에서 지켜야 했던 것은 트랙 개수뿐만이 아닙니다. 첫 오디오가 사용자의 본방과 같고, 기능을 끄면 이전 설정으로 돌아가며, 재시도가 같은 행위를 중복시키지 않아야 했습니다. 자동화를 추가할 때 기존 상태와 사용자의 의도를 함께 보존하도록 검토한 사례입니다.