[Swift] SRT 송출

번듯한 호랑이·2024년 3월 22일

Swift UIKit 기반으로 글이 작성되었습니다.

SRT 송출을 위해 SPM 설치 필요(HaishinKit : https://github.com/shogo4405/HaishinKit.swift.git)
Add Package 후 HaishinKit, SRTHaishinKit 프로젝트에 추가.

SPM 추가 후 기본적인 송출 방법

import HaishinKit
import SRTHaishinKit
import AVFoundation

class stream: UIViewController {

    private var stream: RTMPStream! = nil
    private var connection = RTMPConnection()
    
    override func viewDidLoad() {

        let stream = SRTStream(connection: connection)
        stream.attachAudio(AVCaptureDevice.default(for: .audio)) // 오디오 추가
        stream.attachCamera(AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back), channel: 0) // 카메라 추가

        let hkView = MTHKView(frame: view.bounds) // 촬영화면
        hkView.videoGravity = AVLayerVideoGravity.resizeAspectFill
        hkView.attachStream(stream) // 촬영화면 가져오기


        view.addSubview(hkView)
        
        // https://velog.io/@diddbstjr55/SRT-LIVE-SERVER(참고)
        let url = URL(string: "srt://localhost:8080?streamid=uplive.yys.com/live/test") 

        connection.open(url, mode: .caller)
        stream.publish()
    }

}

송출 종료.

    func stopStreaming() {
        connection.close()
        stream.close()
        stream.attachAudio(nil)
        stream.attachCamera(nil, channel: 0)
        stream.attachCamera(nil, channel: 1)
    }

RTMPHaishinKit은 송출 상태를 모니터링 할 수 있는 기능이 있지만, SRT는 지원하지 않는 것 같아 서버에서 구현하였음.
(https://velog.io/@diddbstjr55/SRT-LIVE-SERVER)
SRT 송출 시 서버에서 Firebase Realtime Database에 작동 여부를 기록. 그리고 observe을 이용해 작동 여부를 판별함.

추가적으로 SRT 영상을 재생할 수 있는 방법을 찾던 도중 MobileVLCKit을 적용시켜 봤는데 HLS 영상은 정상적으로 작동하는데 SRT 영상을 재생할 수 없어 찾아보니 법적인 문제로 SRT 영상은 재생할 수 없다고 한다.
(https://forum.videolan.org/viewtopic.php?f=36&t=163479&p=541133&hilit=srt#p541133)

다른 방법은 SRTHaishinKit을 이용한 방법이 있지만, 소리 재생이 불가능하기 때문에 상황에 따라 적용해야 할 듯하다.

        let hkView = MTHKView(frame: view.bounds) // 촬영화면
        hkView.videoGravity = AVLayerVideoGravity.resizeAspectFill
        hkView.attachStream(stream) // 촬영화면 가져오기


        view.addSubview(hkView)
        
        // https://velog.io/@diddbstjr55/SRT-LIVE-SERVER(참고)
        let url = URL(string: "srt://localhost:8080?streamid=uplive.yys.com/live/test") 

        connection.open(url, mode: .caller)
        stream.play()
profile
안녕하세요 iOS 환경에서 AI, Vision을 공부하고 있습니다.

0개의 댓글