pjsip pjsua2サンプルAndroidアプリのビデオ品質を向上させるにはどうすればよいですか?

3
James 2020-12-23 04:52.

現在のデフォルトのサンプルAndroidpjsip pjsua2サンプルアプリは非常に悪いビデオ品質を送信し、少なくともHd品質に改善したいと考えています。以下の方法を試してみましたが、ビデオ品質が非常に低くなり続けています。送信ビデオの品質を向上させるにはどうすればよいですか。このサンプルアプリは、他のSIPビデオ通話から最大355 * 288のビデオ品質を受信できますが、送信するビデオ品質は非常に低くなります。現在、発信する直前に、MediaFormatvideoファイルから以下の値を更新してHDビデオを実現しようとしています。そして、それは発信ビデオを改善するのにまったく役立ちません。それらの属性を間違った場所で更新していますか?

現在、192 * 144未満のビデオ品質を送信しており、352 * 288を超えるビデオ品質は受け入れていません。少なくとも1280 * 720のビデオ品質をサポートするように更新するにはどうすればよいですか

    MediaFormatVideo mf=new MediaFormatVideo();
    mf.setFpsNum(30);
    mf.setFpsDenum(1);
    mf.setAvgBps(512000);
    mf.setMaxBps(1024000);
    mf.setHeight(720);
    mf.setWidth(1280);

私はそれらの設定を以下のように更新しています。

   MyCall call = new MyCall(account, -1);
    CallOpParam prm = new CallOpParam(true);
    AccountVideoConfig avc=new AccountVideoConfig();
    MediaFormatVideo mf=new MediaFormatVideo();

    Log.e("javan-video",String.valueOf(avc.getAutoShowIncoming()));
    Log.e("javan-videofps",String.valueOf(mf.getFpsNum()));
    mf.setFpsNum(30);
    mf.setFpsDenum(1);
    mf.setAvgBps(512000);
    mf.setMaxBps(1024000);
    mf.setHeight(720);
    mf.setWidth(1280);
    Log.e("javan-videofps",String.valueOf(mf.getFpsNum()));


    try {
        call.makeCall("sip:"+dialno+"@peoplefone.ch", prm);
        AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

       am.setSpeakerphoneOn(true);

         // startRinging();

    } catch (Exception e) {
        call.delete();
        return;
    }

    currentCall = call;
 showCallActivity();
}

ドキュメントを見つけました。実装しようとしましたが、ビデオ品質を向上させることができませんでした。

Framerate
Specify number of frames processed per second.

For encoding direction, configured via pjmedia_vid_codec_param.enc_fmt.det.vid.fps, e.g:
/* Sending @30fps */
param.enc_fmt.det.vid.fps.num   = 30;
param.enc_fmt.det.vid.fps.denum = 1;
Note:
that there is a possibility that the value will be adjusted to follow remote capability. For example, if remote signals that maximum framerate supported is 10fps and locally the encoding direction framerate is set to 30fps, then 10fps will be used.
limitation: if preview is enabled before call is established, capture device will opened using default framerate of the device, and subsequent calls that use that device will use this framerate regardless of the configured encoding framerate that is set above. Currently the only solution is to disable preview before establishing media and re-enable it once the video media is established.
For decoding direction, two steps are needed:
pjmedia_vid_codec_param.dec_fmt.det.vid.fps should be set to the highest value expected for incoming video framerate.
signalling to remote, configured via codec specific SDP format parameter (fmtp): pjmedia_vid_codec_param.dec_fmtp.
H263-1998, maximum framerate is specified per size/resolution basis, check ​here for more info.
/* 3000/(1.001*2) fps for CIF */
param.dec_fmtp.param[m].name = pj_str("CIF");
param.dec_fmtp.param[m].val = pj_str("2");
/* 3000/(1.001*1) fps for QCIF */
param.dec_fmtp.param[n].name = pj_str("QCIF");
param.dec_fmtp.param[n].val = pj_str("1");
H264, similar to size/resolution, the framerate is implicitly specified in H264 level (check the standard specification or ​this) and the H264 level is signalled via H264 SDP fmtp profile-level-id, e.g:
/* Can receive up to 1280×720 @30fps */
param.dec_fmtp.param[n].name = pj_str("profile-level-id");
param.dec_fmtp.param[n].val = pj_str("xxxx1f");
Bitrate
Specify bandwidth requirement for video payloads stream delivery.

This is configurable via pjmedia_vid_codec_param.enc_fmt.det.vid.avg_bps and pjmedia_vid_codec_param.enc_fmt.det.vid.max_bps, e.g:

/* Bitrate range preferred: 512-1024kbps */
param.enc_fmt.det.vid.avg_bps = 512000;
param.enc_fmt.det.vid.max_bps = 1024000;
Notes:

This setting is applicable for encoding and decoding direction, currently there is no way to set asymmetric bitrate. By decoding direction, actually it just means that this setting will be queried when generating bandwidth info for local SDP (see next point).
The bitrate setting of all codecs will be enumerated and the highest value will be signalled in bandwidth info in local SDP (see ticket #1244).
There is a possibility that the encoding bitrate will be adjusted to follow remote bitrate setting, i.e: read from SDP bandwidth info (b=TIAS line) in remote SDP. For example, if remote signals that maximum bitrate is 128kbps and locally the bitrate is set to 512kbps, then 128kbps will be used.
If codec specific bitrate setting signalling (via SDP fmtp) is desired, e.g: MaxBR for H263, application should put the SDP fmtp manually, for example:
/* H263 specific maximum bitrate 512kbps */
param.dec_fmtp.param[n].name = pj_str("MaxBR");
param.dec_fmtp.param[n].val = pj_str("5120"); /* = max_bps / 100 */

ドキュメントリンク:ここにリンクの説明を入力してください

 From: "0525512904" <sip:[email protected]>;tag=1609930889511
I: To: <sip:[email protected]>;tag=c6ce5331-3a35-44c8-bb80-23b6ec664085
I: CSeq: 1 INVITE
I: Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS
I: Contact: <sip:[email protected]:45483;transport=TLS;ob>
I: Supported: replaces, 100rel, timer, norefersub
I: Content-Type: application/sdp
I: Content-Length:   580
I: v=0
I: o=- 3818919690 3818919691 IN IP4 192.168.3.135
I: s=pjmedia
I: b=AS:352
I: t=0 0
I: a=X-nat:0
I: m=audio 4012 RTP/AVP 96 120
I: c=IN IP4 192.168.3.135
I: b=TIAS:64000
I: a=rtcp:4031 IN IP4 192.168.3.135
I: a=sendrecv
I: a=rtpmap:96 speex/16000
I: a=rtpmap:120 telephone-event/16000
I: a=fmtp:120 0-16
I: a=ssrc:1510027056 cname:365aaa4f448493db
I: m=video 4013 RTP/AVP 97
I: c=IN IP4 192.168.3.135
I: b=TIAS:256000
I: a=rtcp:4033 IN IP4 192.168.3.135
I: a=sendrecv
I: a=rtpmap:97 H264/90000
I: a=fmtp:97 profile-level-id=42e01e; packetization-mode=1
I: a=ssrc:1146236185 cname:365aaa4f448493db
I: a=rtcp-fb:* nack pli
I: --end msg--
E: ringing call

完全なログリンクsip呼び出し完全なログ

1 answers

0
Shane Powell 2021-01-07 10:22.

私はまだ与えられた情報であなたの質問に答えることができません。

SDPは、SIPプロトコルのペイロードタイプとして使用されます。

これは、(一部の)SIPログで確認できます。

Content-Type: application/sdp

SDPはオファー/アンサープロトコルです。

あなたがSIPINVITEを与えた不完全なログスニップを考えると(私はあなたが全体の一口メッセージを与えていなかったと思います)、あなたはSDPプロコトールのオファーだけを与えました。したがって、オファーとアンサーの両方を提供するために必要な全体像を把握してください。

また、ビデオエンコーダー/デコーダーのセットアップの周りにも他のPJSIPロギングも含めるとよいでしょう。

あなたの申し出ではそれは言う:

m=video 4013 RTP/AVP 97

パラメータを使用してビデオを送受信できることを意味します。

a=rtpmap:97 H264/90000
a=fmtp:97 profile-level-id=42e01e; packetization-mode=1

これは、90000(つまり、90kHz)のサンプルレートでH264を送受信できることを意味します。

H264パラメータの設定は次のとおりです。a= fmtp:97 profile-level-id = 42e01e; packetization-mode = 1

そう...

profile-level-id=42e01e

https://tools.ietf.org/html/rfc6184

  profile-level-id:
     A base16 [7] (hexadecimal) representation of the following
     three bytes in the sequence parameter set NAL unit is specified
     in [1]: 1) profile_idc, 2) a byte herein referred to as
     profile-iop, composed of the values of constraint_set0_flag,
     constraint_set1_flag, constraint_set2_flag,
     constraint_set3_flag, constraint_set4_flag,
     constraint_set5_flag, and reserved_zero_2bits in bit-
     significance order, starting from the most-significant bit, and
     3) level_idc.  Note that reserved_zero_2bits is required to be
     equal to 0 in [1], but other values for it may be specified in
     the future by ITU-T or ISO/IEC.

profile_idc:0x42(66)profile-iop:0xE0(バイナリ11100000)level_idc:0x1E(30)

https://en.wikipedia.org/wiki/Advanced_Video_Coding

profile_idc:66

ベースラインプロファイル(BP、66)主に、追加のデータ損失の堅牢性を必要とする低コストのアプリケーションの場合、このプロファイルは一部のビデオ会議およびモバイルアプリケーションで使用されます。このプロファイルには、制約付きベースラインプロファイルでサポートされているすべての機能に加えて、損失の堅牢性(または低遅延マルチポイントビデオストリーム合成などの他の目的)に使用できる3つの追加機能が含まれています。このプロファイルの重要性は、2009年の制約付きベースラインプロファイルの定義以降、やや薄れています。これら2つのプロファイルは同じプロファイル識別子コード値を共有するため、すべての制約付きベースラインプロファイルビットストリームもベースラインプロファイルビットストリームと見なされます。

profile-iop:バイナリ11100000

これの意味は:

constraint_set0_flag=1 (Constrained Baseline profile)
constraint_set1_flag=1
constraint_set2_flag=1

これらの2つの値IDCと制約フラグは、デコーダーがサポートできるものに基づいてビデオエンコーダーをセットアップするために使用されます。

レベル:30すなわち3.0

Level: 3.0 Maximum decoding speed (macroblocks/s): 40,500 Maximum
frame size (macroblocks): 1,620 Maximum video bit rate for video
coding layer (VCL): 10,000 Examples for high resolution @ highest
frame rate (maximum stored frames): 
  352×[email protected] (12) 
  352×[email protected] (10) 
  720×[email protected] (6) 
  720×[email protected] (5)

プロファイルレベルはビデオ解像度を指定せず、手動で最大フレームサイズ/ビットレートを指定します。これらの制約内に「収まる」ことができる解像度/フレームレートの任意の組み合わせが有効です。これは、resoulation /フレームレートのリストが有効としてリストされている場所です。

したがって、720×480 @ 30fpsまたは720×576 @ 25fpsは、レベル3.0プロファイルの送信に有効です。

オファーとは、反対側に次のことを伝えていることです。

  1. こちら側は、制約付きベースラインプロファイルH264でエンコードされたストリームのみをデコードできます。
  2. こちら側は、レベル3.0ビットレートまでしかデコードできません(つまり、上記の解像度/ fpsコンボのリスト)

このオファーでは、デバイスが相手側に何を送信するかは示されていません。これは、ローカルセットアップと、相手側がデコードできると言っている内容に依存します。

PJSIPは、セットアップとサポートされているオファーデコードに基づいて送信できる最高の解像度/ fpsを「選択」し(エンコーダーのセットアップに関するPJSIPログを確認できる理由です)、SDP ANSWERに基づいて送信しているものを認識します(提供)。

ビデオは対称である必要はありません。つまり、カメラ/画面のH / Wに応じて、送信できる解像度とは異なる解像度を表示する場合があります。

これは、ストリーミング中に動的に変化する解像度なども考慮していません(たとえば、ポートレート/ランドスケープフリッピング、またはRTCPレポートからのネットワーク帯域幅の変化に基づいて解像度を増減する)。これを調べる唯一の方法は、H264ストリームをキャプチャしてデコードし、その動作を理解することです。PJSIPログからもわかる場合があります。

更新

pjsipロギング出力を見ると、INVITEのSDPオファーと200OKの回答の両方を確認できます。

I: 11:13:36.176           pjsua_core.c  .RX 1119 bytes Response msg 200/INVITE/cseq=22580 (rdata0x6f73203b18) from TLS 95.128.80.3:5061:
I: SIP/2.0 200 OK
I: To: <sip:[email protected]>;tag=61c5c92f
I: Via: SIP/2.0/TLS 146.4.49.20:49305;received=146.4.49.20;rport=49305;branch=z9hG4bKPjdad60ffa-6072-4c6d-8eb1-4a32ab26443a;alias
I: Record-Route: <sip:95.128.80.5;r2=on;lr=on;did=e8.cc62>,<sip:95.128.80.3:5061;transport=tls;r2=on;lr=on;did=e8.cc62>
I: CSeq: 22580 INVITE
I: Call-ID: 0e7676b2-1ca2-48b2-9696-f7e6dc7e1ec9
I: From: <sip:[email protected]>;tag=0b4094bb-b47e-4132-960c-ac564015efa0
I: Content-Type: application/sdp
I: Contact: <sip:[email protected]:5060;alias=95.128.80.93~5060~1>
I: Content-Length: 535
I: v=0
I: o=- 3819003211 3819003212 IN IP4 95.128.80.5
I: s=pjmedia
I: b=AS:352
I: t=0 0
I: a=X-nat:0
I: m=audio 20918 RTP/AVP 96 120
I: c=IN IP4 95.128.80.5
I: b=TIAS:64000
I: a=rtpmap:96 speex/16000
I: a=rtpmap:120 telephone-event/16000
I: a=fmtp:120 0-16
I: a=ssrc:1254727526 cname:496ca0741b8de59f
I: a=sendrecv
I: a=rtcp:20919
I: m=video 20956 RTP/AVP 97
I: c=IN IP4 95.128.80.5
I: b=TIAS:256000
I: a=rtpmap:97 H264/90000
I: a=fmtp:97 profile-level-id=42e01e; packetization-mode=1
I: a=ssrc:977888024 cname:496ca0741b8de59f
I: a=rtcp-fb:* nack pli
I: a=sendrecv
I: a=rtcp:20957
I: --end msg--

回答から、オファーと同じH264パラメーターで回答したことがわかります。

I: m=video 20956 RTP/AVP 97
...
I: a=rtpmap:97 H264/90000
I: a=fmtp:97 profile-level-id=42e01e; packetization-mode=1

したがって、最大H264レベル3.0のビットレートを受け入れます。

キャプチャデバイス(カメラ)の初期化を見ると、次のログが表示されます。

I: 11:13:36.270             vid_port.c  .........Opening device OpenGL renderer [OpenGL] for render: format=I420, size=352x288 @15:1 fps

これは、Androidフロントカメラが352x288 @ 15fpsの解像度で開かれていることを意味します。

これがあなたが話しているビデオ品質の原因だと思います。

pjsipのソースコードを見ると、サポートされているパラメータを持つカメラが列挙されています。

サポートされているキャプチャ解像度サイズは、送信可能な「許可された」解像度サイズに基づいて縮小されたデフォルトのキャプチャ解像度サイズによって決定されます。

許可されるサイズは352x288 @ 15より大きいため、フロントカメラのAndriodのデフォルトのキャプチャ解像度は352x288 @ 15であると想定できます。

フロントカメラの代わりにバックカメラを使用して、ゲッターソリューションまたはより優れたフロントカメラを備えた別のAndriodデバイスを入手できるかどうかを確認できます。

PjSipは、android.hardware.Camera APIを使用して、カメラデバイスにアクセスして使用します。参照PjCameraInfoとPjCameraをPJSIPは、カメラ装置の使用方法の詳細については。

Related questions

MORE COOL STUFF

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは、夫に会ったとき、典型的な交際のアドバイスに逆らいました。

マイケルシーンが非営利の俳優である理由

マイケルシーンが非営利の俳優である理由

マイケルシーンは非営利の俳優ですが、それは正確にはどういう意味ですか?

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

特徴的なスターのコリン・エッグレスフィールドは、RomaDrama Liveでのスリル満点のファンとの出会いについて料理しました!加えて、大会での彼のINSPIREプログラム。

「たどりつけば」をオンラインでストリーミングできない理由

「たどりつけば」をオンラインでストリーミングできない理由

ノーザンエクスポージャーが90年代の最も人気のある番組の1つになった理由を確認するには、Blu-rayまたはDVDプレーヤーをほこりで払う必要があります。

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

バイオニック読書はあなたをより速く読むことができますか?

バイオニック読書はあなたをより速く読むことができますか?

BionicReadingアプリの人気が爆発的に高まっています。しかし、それは本当にあなたを速読術にすることができますか?

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖は、世界で2番目に大きいボイリング湖です。そこにたどり着くまでのトレッキングは大変で長いですが、努力する価値は十分にあります。

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

サロンからのヘアトリミングや個人的な寄付は、油流出を吸収して環境を保護するのに役立つマットとして再利用できます。

3年ぶりにエクアドルで捕まったマーク・ザッカーバーグを振り下ろそうとした男

3年ぶりにエクアドルで捕まったマーク・ザッカーバーグを振り下ろそうとした男

マーク・ザッカーバーグは2018年4月に議会で証言しました。数年前、ポール・セグリアという男がFacebookのCEOであるマーク・ザッカーバーグに対して数百万ドルの訴訟を起こしました。 -サイトの所有権。

スキンのファンエリアへの乱闘流出-ジェット共同練習

スキンのファンエリアへの乱闘流出-ジェット共同練習

ジェッツとスキンズは、日曜日の午後、ワシントンのリッチモンドトレーニングキャンプでの合同練習に参加しました。たまたま、2つのチームの間で事態が熱くなり、いくつかの小競り合いが発生し、最終的には大騒ぎになりました。ワシントンの攻撃的なプレーが終了した後、プレーヤーはお互いに叫んでいたようです。ワシントンの後半のヒットはモーガンモーゼスに取り組みます。

エドワードノートンのスモーキーでスターがちりばめられたジョナサンレセムのマザーレスブルックリンの適応の予告編を見る

エドワードノートンのスモーキーでスターがちりばめられたジョナサンレセムのマザーレスブルックリンの適応の予告編を見る

エドワードノートンは、ジョナサンレセムのジョイシアン1999年の小説マザーレスブルックリンが出版されて以来、スクリーンに登場させたいと考えていました。20年後の今、ハードボイルドストーリーの予告編が到着しました。これは、レセムのストーリーを1950年代に戻し、多くの見慣れた顔を牽引します。

偶発的なキティ猫フィルターはパキスタンの大臣の深刻なライブストリームを弱体化させます

偶発的なキティ猫フィルターはパキスタンの大臣の深刻なライブストリームを弱体化させます

事件の芸術的な再現。いいえ、ShaukatYousafzaiは毛皮ではありません。

Plathville の Kim と Olivia Plath が数年ぶりに言葉を交わすことへようこそ

Plathville の Kim と Olivia Plath が数年ぶりに言葉を交わすことへようこそ

イーサン プラスの誕生日のお祝いは、TLC のウェルカム トゥ プラスビルのシーズン 4 のフィナーレで、戦争中の母親のキム プラスと妻のオリビア プラスを結びつけました。

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Rothschild's luggage got lost, but luckily she has an incredible closet to shop: Sister Paris Hilton's!

ケイト・ミドルトンはロンドンの水辺で一日を過ごし、さらにジェニファー・ロペス、ジュリアン・ハフなど

ケイト・ミドルトンはロンドンの水辺で一日を過ごし、さらにジェニファー・ロペス、ジュリアン・ハフなど

ケイト・ミドルトンはロンドンの水辺で 1 日を過ごし、ジェニファー・ロペス、ジュリアン・ハフなども。ハリウッドからニューヨークまで、そしてその間のあらゆる場所で、お気に入りのスターの活躍をご覧ください!

ウィスコンシン川でのナイフ攻撃で 17 歳の少年が刺されて死亡、他の 4 人が負傷したままになっている

ウィスコンシン川でのナイフ攻撃で 17 歳の少年が刺されて死亡、他の 4 人が負傷したままになっている

捜査官は、グループと容疑者が攻撃の前にお互いを知っていたかどうかを調べています

実際に変換するコンテンツ戦略を作成することを想像してみてください。それが可能だ。

実際に変換するコンテンツ戦略を作成することを想像してみてください。それが可能だ。

2021 年には、サービスを提供する顧客と顧客に伝えるストーリーについて知っていることをすべて再考することをお勧めします。あとずさりする。

マンモスロスは私の心を愛に開いた

マンモスロスは私の心を愛に開いた

フェリックス ザ キャットの 9 歳の誕生日の日に、大人になってからの最大の損失の 1 つである 2013 年のソフィーを思い出します。私はこのエッセイを書き、2013 年にこのプラットフォームで簡単に共有しました。

あなたがインターネットがあなたに望んでいる人になれないとき

あなたがインターネットがあなたに望んでいる人になれないとき

私は「列車事故」という言葉が嫌いです。人々は自分自身の道徳的羅針盤に安らぎを覚え、そうすることで自分自身が判断を下していることに気づきます。

DFINITY ブロックチェーンの分散型クラウド ビジョン

編集者注: アーカイブ目的で保存されている DFINITY ブログの古い資料を表示しています。

DFINITY ブロックチェーンの分散型クラウド ビジョン

この投稿では、DFINITY チームの分散型クラウドのビジョンと、それが従来のブロックチェーンやアマゾン ウェブ サービスなどの既存のクラウド プロバイダーとどのように関連しているかを探ります。大規模なネットワークによって適用される DFINITY テクノロジのデモンストレーションが 2017 年の秋に行われ、その後、非営利財団を支援するための主要な資金調達が行われ、「オープン クラウド」ネットワークは 2018 年の初夏に開始される予定です。 .

Language