기술나눔

SRS 라이브 방송 인트라넷 스트리밍 대역폭 문제 기록

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

문제 배경

에스알에스클라우드 서버, 32코어 CPU, 64G 메모리, 대역폭 300M에 배포됩니다.
클라이언트는 srs에서 스트림을 가져오고 외부 네트워크 클라이언트가 스트림을 가져오는 것을 찾습니다.씨퓨 대역폭은 정상입니다. 그러나 인트라넷 클라이언트가 스트림을 가져오고 스트림을 가져오는 사람의 수가 5명을 초과하면 대역폭이 급등하게 됩니다.
여기에 이미지 설명을 삽입하세요.

문제 해결

srs-bench를 사용하여 SRS 스트레스 테스트, vlc 플레이어 SRS 스트리밍 및 클라이언트 SRS 스트리밍 수행

푸시 스트리밍

스트림을 푸시하려면 ffmpeg를 선택하여 스트림을 푸시하세요.

ffmpeg -re -i C:UserswDesktoptest.mp4 -vcodec copy -acodec copy -f flv -y rtmp://27.128.236.38/live/livestream
  • 1

A.srs-벤치 풀 흐름

./objs/srs_bench -sr webrtc://27.128.236.38/live/livestream -nn 10
  • 1

srs-bench 컴파일 및 배포에 대한 참조 문서:SRS 스트레스 테스트 – SRS-Bench

B.vlc 풀 스트림

媒体->打开网络串流
输入url:https://ip:8088/live/livestream.flv
  • 1
  • 2

시안, 난징, 베이징에서 각각 srs-bench, 클라이언트 및 VLC 스트레스 테스트 수행
테스트 기록은 다음과 같습니다.

환경1명5인6명10명30명
시안 서버 스트레스 테스트 네트워크 세그먼트 A정상정상이상이상이상
시안 서버 스트레스 테스트 네트워크 세그먼트 B정상정상정상불안정한불안정한
시안 실제 고객정상정상정상이상이상
시안 클라이언트 압력 테스트정상정상정상이상이상
난징 서버정상정상정상정상정상
난징 실제 고객정상정상정상정상/
난징 클라이언트 압력 테스트정상정상정상정상/
베이징 서버정상정상이상이상이상
베이징 실제 고객정상정상정상정상/
외부 네트워크 압력 테스트정상정상정상정상정상
VLC 압력 테스트정상정상정상정상/

검증 결과

외부 네트워크 환경 스트레스 테스트, 대역폭 정상, CPU 정상
인트라넷 환경 스트레스 테스트, 5명 이상이면 대역폭이 10배로 급증

패킷 캡처 비교

여기에 이미지 설명을 삽입하세요.

분석하다

비정상 환경에서는 정상 환경보다 지연율이 높으며, 패킷 손실 및 재전송이 발생합니다.

srs 공식 홈페이지를 확인하세요srs 공식 홈페이지
핵심 프로토콜 – webrtc 구성의 webrtc 부분 구성

첫 번째 부분인 rtc_server는 전역 RTC 서버 구성입니다. 일부 주요 구성은 다음과 같습니다.

enabled:是否开启RTC服务器,默认是off。
listen:侦听的RTC端口,注意是UDP协议。
candidate:服务器提供服务的IP地址,由于RTC的特殊性,必须配置这个地址。详细参考Config: Candidate
tcp.listen: 使用TCP传输WebRTC媒体数据,侦听的TCP端口。详细参考WebRTC over TCP
  • 1
  • 2
  • 3
  • 4

두 번째 부분인 각 가상 호스트의 RTC 구성에는 몇 가지 주요 구성이 포함됩니다.

rtc.enabled:是否开启RTC能力,默认是off。
rtc.rtmp_to_rtc:是否开启RTMP转RTC。
rtc.rtc_to_rtmp:是否开启RTC转RTMP。
rtc.stun_timeout:会话超时时间,单位秒。
rtc.nack:是否开启NACK的支持,即丢包重传,默认on。
rtc.twcc:是否开启TWCC的支持,即拥塞控制的反馈机制,默认on。
rtc.dtls_role:DTLS角色,active就是DTLS Client(主动发起),passive是DTLS Server(被动接受)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

rtc.nack 구성의 기본값은 on입니다. 이는 SRS가 패킷 손실을 감지하면 지속적으로 데이터를 재전송한다는 의미입니다.

결론적으로

회사의 인트라넷 환경을 조사한 결과, 인트라넷 환경에는 대역폭 제한이 있는 것으로 나타났습니다. 클라이언트의 스트리밍 대역폭이 일정 크기를 초과하면 스트리밍이 제한됩니다.
이때 SRS는 네트워크를 비정상으로 간주하여 패킷이 손실되어 재전송되므로 대역폭이 계속 급증합니다.

해결하다

옵션 1: 인트라넷 환경에서 대역폭 제한 완화

장점: 라이브 스트리밍의 안정성 보장
단점: 회사가 클라이언트 대역폭을 모니터링할 수 없어 비용이 증가합니다.

시나리오 2:

장점: 내부 및 외부 네트워크의 일반적인 상황에서는 라이브 스트리밍이 정상적이고 대역폭 소비가 적습니다.
결함: 네트워크 이상, SRS는 손실된 패킷을 재전송하지 않으며 모자이크, 지연 등의 문제가 발생할 수 있습니다.