0

我遇到的问题是我的 Android SurfaceViewRenderer 的 Xamarin Forms 自定义渲染器与它显示的远程视频的纵横比不同。这会导致视频两边的相等部分被切断。我曾尝试查看 SurfaceViewRenderer 的 SurfaceChanged 事件,但宽度和高度与 SurfaceView 本身有关,而不是与它作为接收器的视频轨道有关。

在我的对等连接观察器的 OnAddStream 函数中,我可以看到 MediaStream 对象和相关的远程 VideoTrack。这是我认为最相关的代码区域:

public void OnAddStream(MediaStream p0)
    {
        System.Diagnostics.Debug.WriteLine($"{nameof(OnAddStream)}");
        try
        {
            var videoTracks = p0.VideoTracks.OfType<VideoTrack>(); 
            videoTracks.FirstOrDefault().AddSink(_remoteView);

            var theRemoteSurface = _remoteView.Holder.SurfaceFrame;

            var metrics = Resources.System.DisplayMetrics;

            // this is wrong and should be the remote video aspect ratio
            decimal remoteRatio = decimal.Divide((theRemoteSurface.Right - theRemoteSurface.Left), (theRemoteSurface.Bottom - theRemoteSurface.Top));


            decimal myRatio = decimal.Divide(metrics.WidthPixels, metrics.HeightPixels);
            

            var audioTracks = p0.AudioTracks.OfType<AudioTrack>();
            audioTracks.FirstOrDefault().SetEnabled(true);
            audioTracks.FirstOrDefault().SetVolume(10);
        }
        catch (Exception ex)
        {

        }
    }
4

1 回答 1

0

我找到了解决问题的方法。我没有为 WebRTC android 包中的 SurfaceViewRenderer 创建自定义渲染器,而是为 Android.Widget.RelativeLayout 创建了一个。创建RelativeLayout 对象后,我创建了一个SurfaceViewRenderer 对象并使用AddView 方法将其添加到RelativeLayout。然后我将本机控件设置为RelativeLayout,这样就可以延续纵横比。

于 2021-01-26T19:00:00.447 回答