- RevueSDK
- VideoView
Class
VideoView
視訊顯示元件 — UIView 容器,支援 Metal / SampleBuffer 雙模式渲染
@MainActor class VideoViewOverview
使用方式:
let videoView = VideoView(frame: .zero)
videoView.renderMode = .auto // 優先 Metal
videoView.track = someVideoTrack // 自動綁定渲染(weak,track 要由別人持有)
Topics
Structures
struct PinchToZoomOptions調整的是相機硬體變焦(
AVCaptureDevice.videoZoomFactor),非畫面 transform 放大 —— 故僅對本地相機 track(LocalVideoTrack+CameraCapturer)有效。
Initializers
Instance Properties
var adaptiveStreamPixelDensity: AdaptiveStreamPixelDensityvar adaptiveStreamSize: CGSize回傳實體像素尺寸(邏輯尺寸 ×
adaptiveStreamPixelDensity);尺寸未知時回.zero。var avSampleBufferDisplayLayer: AVSampleBufferDisplayLayer?取用內部的
AVSampleBufferDisplayLayer(僅 SampleBuffer 模式可用)。let delegates: MulticastDelegate<any VideoViewDelegate>事件代理 — 訂閱
isRendering、尺寸變化(見VideoViewDelegate)var didRenderFirstFrame: Bool首幀是否已渲染 —— 「曾 render 過至少一幀」(單調,換 track 才 reset)
var isAdaptiveStreamEnabled: Bool目前僅回報「這個 view 現在看得見嗎」(已佈局 + 未隱藏 + 已啟用),不觸發任何畫質調整。
var isAutoZoomResetEnabled: Boolvar isDebugMode: Bool顯示 track sid、解析度(最近一幀的寬高)、首幀、渲染狀態、renderMode、renderer 數量、FPS; 外框正在渲染(
isRendering)時綠色、沒在渲染時紅色。開啟時每秒更新一次 FPS,關閉時移除疊加層。 只在 main 讀寫。var isEnabled: Bool是否啟用渲染
var isFrozen: Bool是否凍結畫面 —— 停在最後一幀,新幀在
render()入口被丟棄。var isHidden: Bool是否隱藏 —— 覆寫
UIView.isHidden,讓 SDK 感知並連動停止渲染。var isPinchToZoomEnabled: Bool設
true只加入.zoomIn(只開放放大);設false只拿掉.zoomIn。 讀取時回傳pinchToZoomOptions.isEnabled(還有.zoomOut時仍是 true)。var isRendering: Bool是否正在渲染 —— 「這道 track 目前有沒有真的在出畫面」
var layoutMode: LayoutMode佈局模式
var mirrorMode: MirrorMode鏡像模式
var pinchToZoomOptions: PinchToZoomOptions有
zoomIn或zoomOut時雙指手勢才啟用,空的就停用。改值時把鏡頭目前倍率夾回新的允許範圍 (含resetOnRelease時直接回預設倍率)。只在 main 讀寫。var renderMode: RenderMode渲染模式
var rotationOverride: VideoRotation?收到的畫面已經是正的(發送端轉正),這只是 App 額外指定的顯示角度。 填法(
layoutMode)以轉向後的寬高計算;和鏡像合成同一個 transform(先轉再鏡像)。var track: VideoTrack?綁定的 Track — 設定後自動開始/停止渲染
Instance Methods
func add(delegate: VideoViewDelegate)func layoutSubviews()func remove(delegate: VideoViewDelegate)移除代理 —— 轉呼
delegates.remove(delegate:)func removeAllDelegates()移除所有代理 —— 轉呼
delegates.removeAll()func set(size: CGSize)本專案 renderer 尺寸由
layoutSubviews直接同步,此方法目前為 no-op。 詳見isAdaptiveStreamEnabled。
Type Methods
Enumerations
enum AdaptiveStreamPixelDensity把 view 的邏輯尺寸(point)換算成實體像素,避免 retina 螢幕上要到過小的畫質層。
enum LayoutMode佈局模式
enum MirrorMode鏡像模式
enum RenderMode渲染模式