WebRTC — iOS Swift — удалить видеопоток и установить для uiview черный цвет

Я реализую приложение, которое извлекает видеопоток с помощью WebRTC (библиотека libjingle_peerconnection). В какой-то момент поток (RTCVideoTrack) мог быть удален. Когда это происходит, в UIView (RTCEAGLVideoView) по-прежнему отображается последний кадр потока. Я хочу установить этот вид на черный. Как мне это сделать?

На данный момент я удаляю поток с помощью следующего кода, но, как я уже сказал, последний кадр продолжает отображаться в представлении.

remoteVideoTrack.setEnabled(false) // RTCVideoTrack object
remoteVideoTrack.remove(videoView) // videoView is the RTCEAGLVideoView UI object
remotePeerConnection.close()

person Community    schedule 26.04.2018    source источник
comment
Создайте представление с черным фоном, затем добавьте его в uiview, изначально скрытое. Сделайте его видимым, когда вы хотите удалить видео. Простой   -  person aBilal17    schedule 26.04.2018
comment
С другой стороны, добавьте свой код в основной поток при удалении videoView.   -  person aBilal17    schedule 26.04.2018
comment
Я уже думаю об этом. Это хороший вариант, но мне интересно, есть ли другой способ удалить этот последний кадр.   -  person    schedule 26.04.2018
comment
попробуйте добавить пустой 'videoView' после его удаления.   -  person aBilal17    schedule 26.04.2018
comment
Наконец, я решил с другим UIView, спрятав его, как сказал @aBilal17.   -  person    schedule 26.04.2018
comment
Все еще открыты для других способов решить эту проблему.   -  person    schedule 26.04.2018
comment
кто-то решил это?   -  person famfamfam    schedule 29.06.2021


Ответы (1)


Я столкнулся с подобной проблемой. Однако в некоторых случаях черный вид был неприемлем, и мне нужно было, чтобы вид рендерера стал полностью прозрачным.

Поскольку контроллер представления видеочата в моем случае отображается в контейнере, я смог сделать так, чтобы последний кадр рендерера исчез, полностью перезагрузив контейнер.

Это соответствующий код:

        // Kill renderer
    vcWebRtc?.willMove(toParent: nil)
    vcWebRtc?.view.removeFromSuperview()
    vcWebRtc?.removeFromParent()
    
    vcWebRtc = UIStoryboard.instance(from: .WebRTC).instantiateInitialViewController() as? WebRtcVC
    if vcWebRtc != nil{
        addChild(vcWebRtc!)
        viewWebRtcContainer.addSubview(vcWebRtc!.view)
        vcWebRtc!.view.frame = viewWebRtcContainer.bounds
        vcWebRtc?.didMove(toParent: self)
        vcWebRtc?.delegate = self}
        
    
person Arik Segal    schedule 25.06.2020
comment
я думаю, что код от удаления этого представления до добавления нового представления занял немного времени, возможно, какое-то представление потребуется отобразить в это представление в это время, а затем сделать сбой... - person famfamfam; 27.05.2021