我正在关注从iPhone启动Facebook直播会话的示例快速代码:
override func viewDidLoad() {
super.viewDidLoad()
liveButton.layer.cornerRadius = 15
session = VCSimpleSession(videoSize: CGSize(width: 1280, height: 720), frameRate: 30, bitrate: 4000000, useInterfaceOrientation: false)
contentView.addSubview(session.previewView)
session.previewView.frame = contentView.bounds
session.delegate = self
}
func startFBLive() {
if FBSDKAccessToken.current() != nil {
FBLiveAPI.shared.startLive(privacy: livePrivacy) { result in
guard let streamUrlString = (result as? NSDictionary)?.value(forKey: "stream_url") as? String else {
return
}
let streamUrl = URL(string: streamUrlString)
guard let lastPathComponent = streamUrl?.lastPathComponent,
let query = streamUrl?.query else {
return
}
self.session.startRtmpSession(
withURL: "rtmp://rtmp-api.facebook.com:80/rtmp/",
andStreamKey: "\(lastPathComponent)?\(query)"
)
self.livePrivacyControl.isUserInteractionEnabled = false
}
} else {
fbLogin()
}
}
此代码会正确地将相机视频输入到Facebook。
但是,我应该如何覆盖UIView,例如倒计时文本在摄像机输入上面?我并不是说在手机上本地显示UIView,我的意思是将UIView叠加到视频源中,以便UIView流入Facebook Live流,并且其他设备上的其他直播观看者也可以看到。
我可以看到VCSimpleSession有这个方法:
addPixelBufferSource: (UIImage*) image
withRect: (CGRect) rect;
但这可能不是我想要的,因为我需要添加一个倒计时文本......任何想法?
答案 0 :(得分:1)
如果没有VCSimpleSession或FBAPI(您可以链接到教程?或示例项目),这并不容易
从某些研究来看,VCSimpleSession似乎有来自相机Feed的previewLayer。
因此,您可以创建标签,将其添加到相机预览图层并以某个间隔(此处为每秒)更新一次。请参阅以下代码:
private var elapsedTime : TimeInterval = 0.0
private var timer: Timer?
private var timerLabel: UILabel!
private func startTimer() {
guard timer == nil else { return }
session.previewLayer.layer.addSublayer(timerLabel.layer)
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(updateTimer), userInfo: nil, repeats: true)
}
@objc private func updateTimer() {
elapsedTime += 1
let minutes = Int(elapsedTime / 60)
let seconds = Int(elapsedTime.truncatingRemainder(dividingBy: 60))
timerLabel.text = String.init(format:"%02d:%02d", minutes, seconds)
}
private func stopTimer(){
timer?.invalidate()
timer = nil
}
答案 1 :(得分:-1)