首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pjsip :视频呼叫窗口预览大小问题(SurfaceView用于显示视频帧)

Pjsip :视频呼叫窗口预览大小问题(SurfaceView用于显示视频帧)
EN

Stack Overflow用户
提问于 2019-09-02 07:14:24
回答 2查看 664关注 0票数 1

我正在尝试使用Pjsip构建SIP调用应用程序,到目前为止,它运行良好。

在显示视频窗口时,我面临一个问题。我使用表面视图显示流帧。

请参阅附图:

我想删除我的预览的两边的黑色空间。

UI部分:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:fitsSystemWindows="true"
    android:layout_height="match_parent">

    <SurfaceView
        android:id="@+id/surfaceIncomingVideo"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <SurfaceView
        android:id="@+id/surfacePreviewCapture"
        android:layout_alignParentBottom="true"
        android:layout_alignParentEnd="true"
        android:layout_width="@dimen/_100sdp"
        android:layout_marginBottom="@dimen/_70sdp"
        android:layout_height="@dimen/_130sdp" />

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            <android.support.design.widget.AppBarLayout
                android:id="@+id/appBarLayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@android:color/transparent"
                app:elevation="0dp">

                <android.support.constraint.ConstraintLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">

                    <android.support.constraint.ConstraintLayout
                        android:id="@+id/layoutCall"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        app:layout_constraintBottom_toBottomOf="@id/ivBack"
                        app:layout_constraintEnd_toEndOf="parent"
                        app:layout_constraintStart_toStartOf="parent"
                        app:layout_constraintTop_toTopOf="@id/ivBack">

                        <android.support.v7.widget.AppCompatImageView
                            android:id="@+id/ivHabariLogo"
                            android:layout_width="27dp"
                            android:layout_height="37dp"
                            app:layout_constraintStart_toStartOf="parent"
                            app:layout_constraintTop_toTopOf="parent"
                            app:srcCompat="@drawable/call_ic_habari_logo" />

                        <android.support.v7.widget.AppCompatTextView
                            android:layout_width="0dp"
                            android:layout_height="wrap_content"
                            android:layout_marginStart="@dimen/_8sdp"
                            android:fontFamily="@font/helvetica_neue_regular"
                            android:text="@string/toolbar_title_video"
                            android:textSize="@dimen/_14ssp"
                            android:textColor="@color/grey"
                            app:layout_constraintBottom_toBottomOf="@+id/ivHabariLogo"
                            app:layout_constraintStart_toEndOf="@+id/ivHabariLogo"
                            app:layout_constraintTop_toTopOf="@+id/ivHabariLogo" />
                    </android.support.constraint.ConstraintLayout>

                    <android.support.v7.widget.AppCompatImageView
                        android:id="@+id/ivBack"
                        android:layout_width="wrap_content"
                        android:layout_height="?android:attr/actionBarSize"
                        android:paddingStart="21dp"
                        android:paddingEnd="5dp"
                        app:layout_constraintStart_toStartOf="parent"
                        app:layout_constraintTop_toTopOf="parent"
                        app:srcCompat="@drawable/back_arrow_white" />

                </android.support.constraint.ConstraintLayout>
            </android.support.design.widget.AppBarLayout>

            <FrameLayout
                android:id="@+id/layoutUser"
                android:layout_marginTop="@dimen/_24sdp"
                android:layout_width="match_parent"
                android:layout_height="@dimen/_100sdp" >
                <RippleBackground
                    android:id="@+id/callRinging"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    app:rb_color="@color/ringing_1"
                    android:layout_gravity="center"
                    app:rb_duration="2500"
                    app:rb_radius="@dimen/_40sdp"
                    app:rb_rippleAmount="3"
                    app:rb_scale="2">

                </RippleBackground>

                <RadarViewUsersView
                    android:id="@+id/radarViewUser"
                    android:layout_width="@dimen/_100sdp"
                    android:layout_height="@dimen/_100sdp"
                    android:layout_gravity="center">

                </RadarViewUsersView>
            </FrameLayout>

            <android.support.v7.widget.AppCompatTextView
                android:id="@+id/tvCalleeName"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:layout_marginTop="@dimen/_8sdp"
                android:textColor="@color/white"
                android:textSize="@dimen/_16ssp"
                android:fontFamily="@font/helvetica_neue_regular" />

            <android.support.v7.widget.AppCompatTextView
                android:id="@+id/tvCallState"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:textColor="@color/white"
                android:text="@string/sip_call_state_calling"
                android:fontFamily="@font/helvetica_neue_regular"
                android:layout_marginTop="@dimen/_2sdp"
                android:textSize="@dimen/_12ssp" />
        </LinearLayout>
    </FrameLayout>

    <LinearLayout
        android:id="@+id/layoutOutgoingCall"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:gravity="center_vertical"
        android:layout_marginBottom="@dimen/_24sdp"
        android:visibility="visible"
        android:orientation="vertical">
        <android.support.v7.widget.AppCompatImageView
            android:id="@+id/ivEndCall"
            android:layout_width="wrap_content"
            android:layout_weight="0.25"
            android:layout_gravity="center"
            android:layout_marginStart="@dimen/_8sdp"
            android:layout_marginEnd="@dimen/_8sdp"
            android:layout_height="0dp"
            android:padding="@dimen/_16sdp"
            app:srcCompat="@drawable/ic_call_reject" />
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <android.support.v7.widget.AppCompatImageView
                android:id="@+id/ivSwitchCamera"
                android:layout_width="0dp"
                android:layout_weight="0.33"
                android:layout_gravity="center"
                android:layout_height="wrap_content"
                app:srcCompat="@drawable/ic_switch_camera" />

            <android.support.v7.widget.AppCompatImageView
                android:id="@+id/ivDisableVideoCall"
                android:layout_width="0dp"
                android:layout_weight="0.33"
                android:layout_marginStart="@dimen/_8sdp"
                android:layout_marginEnd="@dimen/_8sdp"
                android:layout_height="wrap_content"
                app:srcCompat="@drawable/ic_video_cam_off" />

            <android.support.v7.widget.AppCompatImageView
                android:id="@+id/ivMuteVoiceCall"
                android:layout_width="0dp"
                android:layout_weight="0.33"
                android:layout_height="wrap_content"
                app:srcCompat="@drawable/ic_video_mic_on" />
        </LinearLayout>
    </LinearLayout>

    <LinearLayout
        android:id="@+id/layoutIncomingCall"
        android:layout_width="match_parent"
        android:gravity="center_vertical"
        android:layout_alignParentBottom="true"
        android:layout_height="wrap_content"
        android:visibility="gone"
        android:layout_marginBottom="@dimen/_16sdp"
        android:orientation="horizontal">

        <android.support.v7.widget.AppCompatImageView
            android:id="@+id/ivRejectCall"
            android:layout_width="0dp"
            android:layout_weight="0.1"
            android:layout_height="wrap_content"
            app:srcCompat="@drawable/ic_call_reject" />

        <android.support.v7.widget.AppCompatImageView
            android:id="@+id/ivAcceptCall"
            android:layout_width="0dp"
            android:layout_weight="0.1"
            android:layout_height="wrap_content"
            app:srcCompat="@drawable/ic_call_accept" />
    </LinearLayout>
</RelativeLayout>

代码部分:在onCreate()中:

代码语言:javascript
复制
surfaceIncomingVideo.holder.addCallback(this)
surfacePreviewCapture.holder.addCallback(previewHandler)

当收到预览时:

代码语言:javascript
复制
fun updateVideoPreview(holder: SurfaceHolder) {
        if (SipManager.currentCall != null &&
                SipManager.currentCall?.mVideoWindow != null &&
                SipManager.currentCall?.mVideoPreview != null) {
            if (videoPreviewActive) {
                val vidWH = VideoWindowHandle()
                vidWH.handle?.setWindow(holder.surface)
                val vidPrevParam = VideoPreviewOpParam()
                vidPrevParam.window = vidWH
                try {
                    SipManager.currentCall?.mVideoPreview?.start(vidPrevParam)
                } catch (e: Exception) {
                    println(e)
                }

            } else {
                try {
                    SipManager.currentCall?.mVideoPreview?.stop()
                } catch (e: Exception) {
                    println(e)
                }

            }
        }
    }

有人能帮我吗?提前谢谢你!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-03 05:26:03

好的,我终于得到了答案。这是因为我已经设置了旋转我的相机视图的方向。我觉得这是内部的问题。

票数 0
EN

Stack Overflow用户

发布于 2020-11-01 20:42:31

我不会讨论如何做到这一点的极端细节,但总的想法是:

( A)这是PJSIP已知/接受的问题。开发商已声明,其“预期”。

( B)绕过这条路需要几个篮圈才能跳过去:

  1. 在向外呼叫中添加一个标头,说明您的当前方向。不要,使用PJSIP更改它。
  2. 让您的SIP服务器将此头转发给目标客户端。
  3. 让目标客户端读取这个标题并在android端旋转视频。

在我们说话的时候,我正在处理这个问题,我的观点是有方向的。我对android开发相当陌生,所以我现在需要弄清楚如何旋转一个表面视图(setRotation不工作.)以及在方向发生变化时如何向客户端发送附加请求之后。

但这是基本想法..。如果你想摆脱酒吧和处理黑棒,这是一条路。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57752769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档