HaishinKit的BroadcastView(MTHKView)无法全屏及自适应设备宽高比问题求助
问题1:MTHKView无法铺满全屏有黑边
MTHKView默认的视频渲染模式为保持原始比例不裁剪,多余区域会留黑边,仅需修改渲染配置即可解决:
修改BroadcastView的makeUIView方法,初始化MTHKView后新增视频填充模式设置:
public func makeUIView(context: Context) -> MTHKView { let view = MTHKView(frame: .zero) view.translatesAutoresizingMaskIntoConstraints = false // 新增:设置视频等比例缩放铺满整个视图,超出部分自动裁剪 view.videoGravity = .resizeAspectFill view.attachStream(stream) stream.delegate = context.coordinator DispatchQueue.main.async { self.broadcastView = view } let focusGesture = UITapGestureRecognizer(target: context.coordinator, action: #selector(Coordinator.focusGesture(sender:))) view.addGestureRecognizer(focusGesture) return view }
问题2:动态适配不同设备宽高比,无需手动设置视频宽高
你可以在配置RTMPStream时,动态获取当前设备的屏幕尺寸计算对应视频编码宽高,替代原固定写死的1080x1920数值即可,注意H264编码要求宽高为偶数,需要做兼容处理:
修改TestStreamView的onAppear逻辑:
.onAppear { rtmpStream = RTMPStream(connection: rtmpConnection) guard let stream = rtmpStream else { return } stream.orientation = .portrait // 动态计算适配当前设备的视频宽高 let screenSize = UIScreen.main.bounds.size let screenScale = UIScreen.main.scale // 竖屏状态下取短边为宽、长边为高 var videoWidth = Int(min(screenSize.width, screenSize.height) * screenScale) var videoHeight = Int(max(screenSize.width, screenSize.height) * screenScale) // 兼容H264编码要求,确保宽高为偶数 videoWidth = videoWidth % 2 == 0 ? videoWidth : videoWidth + 1 videoHeight = videoHeight % 2 == 0 ? videoHeight : videoHeight + 1 stream.captureSettings = [ .sessionPreset: AVCaptureSession.Preset.hd1920x1080, .continuousAutofocus: true, .continuousExposure: true, .fps: 30 ] stream.videoSettings = [ .scalingMode: ScalingMode.cropSourceToCleanAperture, .width: videoWidth, .height: videoHeight, .bitrate: 5000000, .profileLevel: kVTProfileLevel_H264_Main_AutoLevel, .maxKeyFrameIntervalDuration: 2 ] stream.audioSettings = [ .bitrate: 128000 ] stream.attachAudio(AVCaptureDevice.default(for: .audio)) stream.attachCamera(DeviceUtil.device(withPosition: .front)) }
如果需要支持横竖屏切换,只需要监听设备方向变化通知,在方向切换后重新计算宽高更新stream.videoSettings即可。
内容的提问来源于stack exchange,提问作者Antonio Chan
相关产品推荐
相关产品推荐

