Bhumika
Bhumika

Reputation: 159

RTCVideoTrack shows stretched WebRTC

I am using core WebRTC framework and rendering my local stream in IPhone full screen mode. Unfortunately, my video shows stretched, doesn't show like video view in camera app.

I tried to add aspect ratio in RTCMediaConstraints and also used adaptOutputFormatToWidth method to fix the output.

NSDictionary* mandatoryConstraints;

/* want to calculate aspect ratio dynamically */
NSString *aspectRatio = [NSString stringWithFormat:@"%f",(double)4/3];
if (aspectRatio) {
   mandatoryConstraints = @{ kRTCMediaConstraintsMaxAspectRatio: 
   aspectRatio};
}

RTCMediaConstraints *cameraConstraints = [RTCMediaConstraints alloc];
        cameraConstraints = [cameraConstraints initWithMandatoryConstraints:mandatoryConstraints optionalConstraints:nil];


RTCAVFoundationVideoSource *localVideoSource =  [peerFactory avFoundationVideoSourceWithConstraints:mediaConstraint];
        [localVideoSource adaptOutputFormatToWidth:devicewidth:devicewidth fps:30]; 

In below link, the difference between camera video view and my app call video view is shown

https://drive.google.com/file/d/1HN3KQcJphtC3VzJjlI4Hm-D3u2E6qmdQ/view?usp=sharing

Upvotes: 3

Views: 2662

Answers (2)

Emefar
Emefar

Reputation: 185

(For Swift) -> Use RTCMTLVideoView and set videoContentMode

#if arch(arm64)
let renderer = RTCMTLVideoView(frame: videoView.frame)
renderer.videoContentMode = .scaleAspectFill
#else
let renderer = RTCEAGLVideoView(frame: videoView.frame)
#endif

Upvotes: 1

Sumit Meena
Sumit Meena

Reputation: 529

I believe you are rendering your video in RTCEAGLVideoView, which require adjustment for size, you can use RTCMTLVideoView in place of RTCEAGLVideoView.

and if you want to use RTCEAGLVideoView, use RTCEAGLVideoViewDelegate method.

- (void)videoView:(RTCEAGLVideoView *)videoView didChangeVideoSize:(CGSize)size;

this method will give you correct size of the video.

Upvotes: 4

Related Questions