서버: AWS EC2
운영체제: 우분투 22.04
모바일: Flutter 3
이전에 nginx rtmp 설정 과정 참고
모바일(플러터)에서 rmtp 스트리밍을 시작하고 이를 EC2 nginx rtmp 서버로 푸시하는 과정에서 다음과 같은 connection timedout 에러가 계속해서 발생했다.
Event{type: Name(rawValue: "ioError"),bubbles: false,data: nil,target: Optional(ApiVideoHaishinKit.RTMPConnection)} 2022-15-08 22:32:39.604 [Warn] [com.haishinkit.HaishinKit]
[RTMPSocket.swift:104] didTimeout() > connection timedout
flutter run --web-port 1935
❌flutter run --web-port 9999
❌/etc/nginx/nginx.conf
파일 수정EC2의 보안그룹의 인바운드 규칙이란 인스턴스에 도달하도록 허용된 수신 트래픽을 제어하는 규칙을 말한다.
해당 인스턴스의 인바운드 규칙에 기존에는 22번 포트를 사용하는 ssh 접속만 허용이 되어있었다.
반면, 모바일에서는 rtmp 서버로 publish 할 때 1935번 포트를 사용한다. 하지만, 인바운드 규칙에 1935번 포트에 관한 허용 규칙이 없으므로 계속해서 커넥션이 실패했던 것으로 원인을 찾을 수 있었다.
다음과 같이 TCP 1935번 포트를 허용하는 인바운드 규칙을 허용하니 잘 작동됨을 알 수 있었다.
참고로, AWS 공식 문서를 찾아보면 소스로 0.0.0.0/0을 입력 시 모든 주소가 서버에 접근할 수 있게 된다고 한다.
모바일(flutter) -> rtmp서버로 publish하기 위한 설정
1. ufw(방화벽) 1935번 포트 허용
2. nginx.conf에서 rtmp 모듈 설정에 listen 1935; 추가
3. EC2 보안그룹에 TCP 1935번 포트 허용 인바운드 규칙 추가