修改 "Skype for Business SDK" 的相机实例的旋转

Modify rotation of the camera instance of the "Skype for Business SDK"

我正在寻找使用 Skype for Business SDK (SfbSDK) 为 Android 开发视频会议应用程序。

看看我是否能够满足一些需求,我使用 Office Developer 团队分配的 SfbSDK 克隆了示例应用程序的 git 存储库,并且available here

如果示例应用程序允许我广播前置摄像头 and/or 后置摄像头,除了更改目标摄像头(前置、后置)外,我找不到任何允许我修改摄像头实例的参数...).

我想要的(至少)是在您将 phone 设置为横向模式时修改旋转(修改其他参数也很好,例如 Camera.Parameters)。

因为如果您尝试使用示例应用程序,预览(在 phone 上)和传出的视频都会 已转换 ,如下所示。

所以我尝试创建一个 android.hardware.Camera 的实例,并通过像这样投射它来将其设置为活动相机:

videoService.setActiveCamera(com.microsoft.office.sfb.appsdk.Camera)

但是它不起作用......或者我做错了......!

这可能吗!?

欢迎任何建议。

我遇到了同样的问题,但在 Skype 使用的 Camera 对象中都没有找到 setDisplayRotation 函数。如果您转到相机接口的声明,您会发现可用的选项不多。但是如果你进入 SkypeForBusinessNative.aar,在 dl-video 中你可以在下面的包中看到 class RealCameraImpl -> com.microsoft.dl.video.capture.impl 并且它有一个 setDisplayRotation功能。不幸的是,他们使用了没有此功能的其他 Camera 对象。也许这会帮助您找到新的东西

不久前回到项目,我终于找到了解决方案

DeviceRotationMonitor.getInstance().onRotation(Context context);

做作业!!
希望对你有帮助。


编辑:正如@miecio 在下面的评论中所问,有关如何使用此答案的更多信息。

如果您使用的是 Skype for Business SDK,您可以在文档中找到帮助程序 class ( here) 它授予您一些与它交互的功能以及一些回调处理程序来接收它的不同状态。

在这个助手 class 中,您会发现以下方法:

public class ConversationHelper {
    ...
    /**
     * Setup the Video preview.
     * @param texture SurfaceTexture
     */
    private void surfaceTextureCreatedCallback(SurfaceTexture texture) {
        try {
            // Tie the video stream to the texture view control
            videoService.showPreview(texture);

            // Check state of video service.
            // If not started, start it.
            if (this.videoService.canStart()) {
                this.videoService.start();
            } else {
                // On joining the meeting the Video service is started by default.
                // Since the view is created later the video service is paused.
                // Resume the service.
                if (this.videoService.canSetPaused()) {
                    this.videoService.setPaused(false);
                }
            }
            setSkypeOrientation();
        } catch (SFBException e) {
            e.printStackTrace();
        }
    }
    ...
}

我在其中添加了以下指令:setSkypeOrientation().
这是为了在创建表面后设置正确的屏幕方向(默认情况下,即使您不添加它,屏幕方向也应该是好的)。

此外,在实现助手 class 的 activity 中,我重写了 onConfigurationChanged(Configuration newConfig) 如下:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    if (mConversationHelper != null) {
        mConversationHelper.setSkypeOrientation();
    }
}

该部分用于处理和设置正确的屏幕方向。

最后,在setSkypeOrientation()中,我简单的使用了第一版答案中的上述指令

public class ConversationHelper {
    ...
    public void setSkypeOrientation() {
        DeviceRotationMonitor.getInstance().onRotation(mContext);
    }
    ...
}

注意:class DeviceRotationMonitor 是从 :
导入的 import com.microsoft.office.lync.platform.DeviceRotationMonitor;

至少我是这样用的,你可以根据你的用例进行调整。
希望 "edit" 使使用更清楚。