データフロー
図中の黒枠で囲んだ部分か今回の主な実装になります。
開発環境
macOS Mojave 10.14.1
Xcode 10.1
ios 12.1
AgoraVideoSDK for iOS 2.3.1
ソースコード
元のソースはSDKに内包されているサンプルプロジェクト(OpenLive-iOS)になります。
実装内容
以下のコードを任意のタイミングで実行します。
LiveRoomViewController.swift
//描画サイズ,ビットレート,フレームレート等の設定
let transcoding = AgoraLiveTranscoding()
transcoding.size = CGSize(width: 720, height: 640)
transcoding.videoBitrate = 1024
transcoding.videoFramerate = 15
transcoding.lowLatency = true
transcoding.backgroundColor = UIColor .white
//配信uid,映像表示サイズ/位置等の設定
let localLayout = AgoraLiveTranscodingUser()
localLayout.uid = 1000;//Channelに接続した時のuid
localLayout.rect = CGRect(x:0, y:0, width:360, height:640);
localLayout.zOrder = 1;
localLayout.alpha = 1;
transcoding.transcodingUsers = [localLayout]
rtcEngine.setLiveTranscoding(transcoding)
//サーバーへの配信開始
rtcEngine.addPublishStreamUrl("rtmp://[SERVER]/[APP]/[STREAM]",transcodingEnabled: true)
出力
rtmp or HLSのプレイヤー上で720x640の領域内に360x640でスマホの映像が描画されています。
(視聴側のプロトコルはRTMPサーバーの機能によります)