【问题标题】:Broadcast View (MTHKView) not Extending full screen广播视图 (MTHKView) 未扩展全屏
【发布时间】:2021-12-12 11:20:48
【问题描述】:

考虑以下示例

import AVFoundation
import HaishinKit
import VideoToolbox
import SwiftUI

struct TestStreamView: View {
    @State var rtmpStream: RTMPStream?
    var rtmpConnection = RTMPConnection()

    var body: some View {
        ZStack(alignment: .topLeading) {
            if let stream = rtmpStream {
                BroadcastView(stream: stream)
                    .cornerRadius(12)
            }
        }
        .edgesIgnoringSafeArea(.top)
        .onAppear {
            rtmpStream = RTMPStream(connection: rtmpConnection)
            guard let stream = rtmpStream else { return }
            stream.orientation = .portrait
            stream.captureSettings = [
                .sessionPreset: AVCaptureSession.Preset.hd1920x1080,
                .continuousAutofocus: true,
                .continuousExposure: true,
                .fps: 30
            ]
            stream.videoSettings = [
                .scalingMode: ScalingMode.cropSourceToCleanAperture,
                .width: 1080,
                .height: 1920,
                .bitrate: 5000000,
                .profileLevel: kVTProfileLevel_H264_Main_AutoLevel,
                .maxKeyFrameIntervalDuration: 2
            ]
            stream.audioSettings = [
                .bitrate: 128000 // Always use 128kbps
            ]

            stream.attachAudio(AVCaptureDevice.default(for: .audio))
            stream.attachCamera(DeviceUtil.device(withPosition: .front))
        }
    }
}

我使用名为HaishinKit 的库来设置我的直播功能。 我为 HaishinKit 中的MTHKView 创建了一个UIViewRepresentable,如下所示

public struct BroadcastView: UIViewRepresentable {
    let stream: RTMPStream
    @State private var broadcastView: MTHKView?

    public class Coordinator: NSObject, RTMPStreamDelegate {
        var parent: BroadcastView

        init(_ parent: BroadcastView) {
            self.parent = parent
        }

        // MARK: - RTMPStreamDelegate callbacks

        public func rtmpStreamDidClear(_ stream: RTMPStream) {}
        public func rtmpStream(_ stream: RTMPStream, didStatics connection: RTMPConnection) {}
        public func rtmpStream(_ stream: RTMPStream, didPublishInsufficientBW connection: RTMPConnection) {}
        public func rtmpStream(_ stream: RTMPStream, didPublishSufficientBW connection: RTMPConnection) {}

        @objc func focusGesture(sender: UITapGestureRecognizer) {
            guard let broadcastView = parent.broadcastView else { return }
            if sender.state == UIGestureRecognizer.State.ended {
                let point = sender.location(in: broadcastView)
                let pointOfInterest = CGPoint(x: point.x / broadcastView.bounds.size.width, y: point.y / broadcastView.bounds.size.height)
                parent.stream.setPointOfInterest(pointOfInterest, exposure: pointOfInterest)
            }
        }
    }

    public func makeCoordinator() -> Coordinator {
        Coordinator(self)
    }

    public func makeUIView(context: Context) -> MTHKView {
        let view = MTHKView(frame: .zero)
        view.translatesAutoresizingMaskIntoConstraints = false
        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
    }

    public func updateUIView(_ uiView: MTHKView, context: Context) {
        uiView.attachStream(stream)
    }
}

我在此设置中面临两个主要问题。

  1. MTHKView 视频捕获没有扩展到全屏(观察下面的黑色间距屏幕截图)
  2. 我需要在 videoSettings 属性上设置 aspectRatio,如果使用其他设备,这似乎不是最理想的。

任何意见或想法将不胜感激!谢谢!

【问题讨论】:

    标签: ios swift live-streaming


    【解决方案1】:

    添加view.videoGravity = .resizeAspectFill 可以解决问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-21
      • 1970-01-01
      • 2023-03-08
      • 2013-08-21
      相关资源
      最近更新 更多