void FGameLiveStreaming::OnSlateWindowRenderedDuringBroadcasting( SWindow& SlateWindow, void* ViewportRHIPtr ) { // If we're streaming live video/audio, we'll go ahead and push new video frames here UGameViewportClient* GameViewportClient = GEngine->GameViewport; if( IsBroadcastingGame() && GameViewportClient != nullptr ) { // We only care about our own Slate window if( GameViewportClient->GetWindow() == SlateWindow.AsShared() ) { // Check to see if we're streaming live video. If so, we'll want to push new frames to be broadcast. if( LiveStreamer->IsReadyForVideoFrames() ) { // Check to see if there are any video frames ready to push BroadcastGameVideoFrame(); // Start copying next game video frame const FViewportRHIRef* ViewportRHI = ( const FViewportRHIRef* )ViewportRHIPtr; StartCopyingNextGameVideoFrame( *ViewportRHI ); } } } else { // No longer broadcasting. The live streaming service may have been interrupted. StopBroadcastingGame(); } }
void FWebMRecord::OnSlateWindowRenderedDuringCapture(SWindow& SlateWindow, void* ViewportRHIPtr) { // Probably need to verify that this is the window we want, but not sure yet UGameViewportClient* GameViewportClient = GEngine->GameViewport; if (bRecording && GameViewportClient != nullptr) { if (GameViewportClient->GetWindow() == SlateWindow.AsShared()) { if (VideoDeltaTimeAccum >= VideoFrameDelay) { //UE_LOG(LogUTWebM, Log, TEXT("Saving video frame %f"), VideoDeltaTimeAccum); SaveCurrentFrameToDisk(); const FViewportRHIRef* ViewportRHI = (const FViewportRHIRef*)ViewportRHIPtr; StartCopyingNextGameFrame(*ViewportRHI); } } } }