Skip to content

2. StreamLive 입력과 채널 ​

StreamLive에서 원본을 받을 입력과 트랜스코딩 채널을 구성하고, 처리한 영상을 StreamPackage로 전달합니다. 콘솔을 이용한 기본 절차를 먼저 설명하고 API 예시를 이어서 제공합니다.

사전 준비 ​

  • 1. StreamPackage 채널과 엔드포인트를 완료하고 채널 ID를 준비합니다.
  • 같은 계정의 대상 리전을 확인합니다.
  • 입력에 접속할 송출 측 공인 IP를 준비합니다. StreamLink를 연결할 경우 인코더가 아니라 StreamLive에 실제 접속하는 StreamLink 출력 측 주소를 기준으로 접근 정책을 설정합니다.
  • 아래 1080p / 720p 설정은 예시입니다. 원본 해상도, 프레임레이트와 필요한 출력 품질에 맞게 조정합니다.

1. 보안 그룹과 입력 생성 ​

  1. StreamLive 콘솔의 Security Group에서 입력 접근 정책을 생성합니다.
  2. 실제 송출 IP만 허용합니다. 단일 IPv4 주소는 203.0.113.10/32와 같은 CIDR 형식으로 입력합니다. 이 주소는 설명용이므로 실제 공인 IP로 바꿉니다.
  3. Input → Create Input에서 이름과 RTMP_PUSH 유형을 선택합니다.
  4. 보안 그룹을 연결하고 Destination의 application name과 stream name을 입력합니다.
  5. 생성 후 콘솔에 표시된 푸시 주소를 확인합니다. 이 주소는 다음 단계에서 StreamLink Output의 목적지로 사용합니다.

입력 A/B는 별도 파이프라인입니다. 이중화를 구성할 때는 각각의 주소와 송출 경로를 확인합니다.

2. 채널과 출력 구성 ​

  1. Channel → Create Channel을 선택하고 채널 이름을 입력합니다.
  2. 앞에서 만든 Input을 연결합니다.
  3. 출력 그룹의 유형을 HLS_STREAM_PACKAGE로 선택합니다.
  4. 목적지에 같은 계정의 StreamPackage 채널 ID를 지정합니다. 일반 HLS 출력은 HTTP PUT 목적지 URL을 사용하는 별도 유형이므로 구분합니다.
  5. Output을 두 개 추가하고 각각의 Transcoding Setting → Setting에서 아래 설정을 적용합니다.
설정1080p 출력720p 출력
오디오 / 영상 템플릿 이름quickstart1080pquickstart720p
영상 코덱H.264H.264
해상도1920 × 10801280 × 720
프레임레이트30 fps30 fps
영상 비트레이트4 Mbps2 Mbps
오디오AAC, 128 kbpsAAC, 128 kbps

템플릿 이름은 영문 / 숫자 1~20자로 지정합니다. 채널 안의 출력 프레임레이트 설정은 동일하게 맞춥니다.

세그먼트 설정: Segment 설정에서 이 예제는 TS 형식, 세그먼트 길이 4초, 목록 유지 개수 5개로 구성합니다. 콘솔 표시 단위를 확인합니다. 아래 API 예시의 SegmentDuration: 4000은 밀리초 단위입니다. 설정 저장: Confirm → Done으로 저장합니다.

3. 시작과 상세 화면 확인 ​

대상 채널에서 Start를 선택하고 상태를 확인합니다.

StreamLive 채널 상세 화면: 실행 상태와 연결된 입력 확인

  • Information → Basic Information → State: RUNNING이면 채널이 시작된 상태입니다.
  • Input Setting: 앞에서 만든 입력의 이름과 ID가 연결되어 있는지 확인합니다.
  • Output Group Setting: StreamPackage 목적지와 두 개의 출력을 확인합니다.
  • Alerts / Health / Logs: 입력 및 출력 장애가 있는지 확인합니다.

미리보기 설정과 입력 상태를 확인하고, 최종 판정은 StreamPackage 미디어 목록 갱신 및 실제 영상 / 오디오 재생으로 진행합니다.

4. 다음 단계와 테스트 종료 ​

3. StreamLink Flow 연결에서 원본 송출을 연결한 뒤 4. 송출 및 재생 확인을 진행합니다.

실행 중 채널은 정지한 뒤 설정을 편집합니다. 테스트 종료 시 대상 채널 / 입력 / 보안 그룹의 사용 여부를 확인하고 전용 리소스를 정리합니다.

공식 문서 ​

API로 구성하는 경우 ​

다음은 콘솔 절차와 같은 구성을 만드는 API 예시입니다.

보안 그룹 생성 ​

입력에 실제 접속하는 송출 IP를 허용합니다. 아래 설명용 IP를 실제 송출 공인 IP로 변경합니다.

bash
tccli mdl CreateStreamLiveInputSecurityGroup \
  --region ap-seoul \
  --Name justinkim_ingest_allowed \
  --Whitelist 203.0.113.10/32
json
{
  "Id": "6AA6************26B1"
}

203.0.113.10/32는 설명용 주소입니다. StreamLive에 접속하는 송출 측 공인 IP로 변경합니다. 전체 주소 허용은 피합니다.

입력 생성 ​

RTMP_PUSH 타입으로 만들고 AppName / StreamName을 지정합니다. 이 조합이 곧 푸시 주소가 됩니다.

bash
tccli mdl CreateStreamLiveInput \
  --region ap-seoul \
  --Name justinkim_quickstart_input \
  --Type RTMP_PUSH \
  --SecurityGroupIds '["6AA6************26B1"]' \
  --InputSettings '[{"AppName":"justinkim","StreamName":"quickstart"}]'
json
{
  "Id": "6AA6************26B2"
}

확인해 보면 입력 주소를 줍니다.

bash
tccli mdl DescribeStreamLiveInput \
  --region ap-seoul \
  --Id 6AA6************26B2
json
{
  "Type": "RTMP_PUSH",
  "InputSettings": [
    {
      "AppName": "justinkim",
      "StreamName": "quickstart",
      "InputAddress": "rtmp://13******46.ap-seoul-1.streamlive.myqcloud.com"
    }
  ]
}

즉 푸시 주소는 다음 두 줄로 정리됩니다.

text
URL       rtmp://13******46.ap-seoul-1.streamlive.myqcloud.com/justinkim
StreamKey quickstart

채널 생성 ​

채널은 입력 + 트랜스코딩 템플릿 + 출력 그룹을 묶은 실행 단위입니다. 설정이 길어서 JSON 파일로 만들어 사용합니다.

bash
cat > /tmp/streamlive-channel.json <<'EOF'
{
  "Name": "justinkim_quickstart_channel",
  "AttachedInputs": [{ "Id": "6AA6************26B2" }],
  "AVTemplates": [
    {
      "Name": "justinkim1080p",
      "NeedVideo": 1, "Vcodec": "H264",
      "Width": 1920, "Height": 1080, "Fps": 30,
      "VideoBitrate": 4000000, "RateControlMode": "ABR",
      "NeedAudio": 1, "Acodec": "AAC", "AudioBitrate": 128000
    },
    {
      "Name": "justinkim720p",
      "NeedVideo": 1, "Vcodec": "H264",
      "Width": 1280, "Height": 720, "Fps": 30,
      "VideoBitrate": 2000000, "RateControlMode": "ABR",
      "NeedAudio": 1, "Acodec": "AAC", "AudioBitrate": 128000
    }
  ],
  "OutputGroups": [
    {
      "Name": "justinkim_to_package",
      "Type": "HLS_STREAM_PACKAGE",
      "Outputs": [
        { "Name": "justinkimout1080p", "AVTemplateNames": ["justinkim1080p"] },
        { "Name": "justinkimout720p",  "AVTemplateNames": ["justinkim720p"] }
      ],
      "Destinations": [
        { "OutputUrl": "https://13******46.ap-seoul.streampackage.srclivepush.myqcloud.com/v1/01a0****96005/01a0****96006" }
      ],
      "HlsRemuxSettings": {
        "SegmentDuration": 4000,
        "SegmentNumber": 5,
        "Scheme": "MERGE",
        "SegmentType": "ts"
      },
      "StreamPackageSettings": { "Id": "6AA6************32BF" }
    }
  ]
}
EOF

JSON 파일 저장 후 다음 명령으로 채널을 생성합니다.

bash
tccli mdl CreateStreamLiveChannel \
  --region ap-seoul \
  --cli-input-json file:///tmp/streamlive-channel.json
json
{
  "Id": "6AA6************5542"
}

설정 항목 ​

항목값의미
TypeHLS_STREAM_PACKAGEStreamPackage로 HLS를 밀어넣는 출력 타입
Destinations.OutputUrlStreamPackage Input URL1단계에서 확보한 주소
StreamPackageSettings.Id채널 ID목적지 채널 지정
SegmentDuration4000세그먼트 4초
SegmentNumber5플레이리스트에 유지할 세그먼트 수
SchemeMERGE오디오와 영상를 하나의 TS로 묶음

출력 하나당 AVTemplateNames는 한 개만 넣으세요. 1080p와 720p를 한 출력에 몰아넣으면 생성은 되지만 렌디션이 하나만 나옵니다. ABR 래더를 만들려면 템플릿 수만큼 출력을 만드는 방식으로 가야 합니다.

트랜스코딩 템플릿 이름은 streamlive1080p처럼 영문 / 숫자를 사용합니다. 채널 이름에는 밑줄을 사용할 수 있습니다.

채널 시작 ​

bash
tccli mdl StartStreamLiveChannel \
  --region ap-seoul \
  --Id 6AA6************5542

상태가 RUNNING인지 확인합니다. 다음 단계에서 실제 송출과 재생을 확인합니다.

bash
tccli mdl DescribeStreamLiveChannels --region ap-seoul
text
justinkim_quickstart_channel   6AA6************5542   RUNNING

RTMP 입력 생성 화면 ​

StreamLive RTMP 입력 생성 폼

RTMP_PUSH 입력 생성 폼에서 Security Group을 선택하고 Destination A에 application name과 stream name을 지정한 뒤 Confirm을 누릅니다. Destination B는 두 번째 파이프라인에 사용합니다.

基于 VitePress 构建 · 部署于腾讯云 EdgeOne Pages