2

テンプレートとして org.jitsi.examples.AVReceive2 および *.AVTransmit2 から始めて、より大きなアプレットに統合するための Libjitsi 音声会議コンポーネントを構築しようとしています。これらの例を 1 台のコンピューターで適切に実行していますが、試した他のすべてのコンピューターでは、MediaDevices の初期化中にエラー メッセージが表示され続けます。AVReceive2 に関連するコード スニペットは次のとおりです。

private final int localPortBase;
private MediaStream[] mediaStreams;
private final InetAddress remoteAddr;
private final int remotePortBase;

public AudioTranceiver(int localPortBase, String remoteHost, int remotePortBase) {

    this.localPortBase = localPortBase;
    this.remoteAddr = InetAddress.getByName(remoteHost);
    this.remotePortBase = remotePortBase;
}

public String start() {
    MediaType mediaType = MediaType.AUDIO;
    MediaService mediaService = LibJitsi.getMediaService();
    int localPort = localPortBase;
    int remotePort = remotePortBase;

    mediaStreams = new MediaStream[1];
    for(MediaDevice audio : mediaService.getDevices(mediaType, MediaUseCase.ANY)) {
        System.out.println(audio.toString() + "\n");
    }
    try {
        MediaDevice device
            = mediaService.getDefaultDevice(mediaType, MediaUseCase.CALL);
        MediaStream mediaStream = mediaService.createMediaStream(device);

        mediaStream.setDirection(MediaDirection.RECVONLY);
......
......

このコードは巨大なログを生成します。「動作中」と「非動作中」の両方のシステムで行ごとに調べましたが、最後の部分を除いて、顕著なログの不一致は見つかりませんでした。コードが正常に動作する 1 台のコンピューターでは、初期化は次のように終了します。

Oct 29, 2015 3:08:53 PM org.jitsi.util.Logger info
INFO: Initializing audio devices
Oct 29, 2015 3:08:53 PM org.jitsi.util.Logger info
INFO: Initializing video devices
Oct 29, 2015 3:08:54 PM org.jitsi.util.Logger info
INFO: Support for the formats of camera 'Lenovo EasyCamera': [AVFRAME, class org.jitsi.impl.neomedia.codec.video.AVFrame, pixFmt 1, deviceSystemPixFmt 0x32595559]
Oct 29, 2015 3:08:54 PM org.jitsi.util.Logger info
INFO: Looking for configured audio devices.
Oct 29, 2015 3:08:54 PM org.jitsi.util.Logger info
INFO: Scanning for configured Video Devices.
Oct 29, 2015 3:08:54 PM org.jitsi.util.Logger info
INFO: Found Lenovo EasyCamera as a AVFRAME, class org.jitsi.impl.neomedia.codec.video.AVFrame video capture device.
Oct 29, 2015 3:08:56 PM org.jitsi.util.Logger info
INFO: GatherEntropy got: 88200 bytes

この時点で、コンピュータは着信 RTP オーディオ ストリームを正常に受信します。他のデバイスでは、エラーが発生し、次のようにクラッシュします。

Oct 29, 2015 2:58:12 PM org.jitsi.util.Logger info
INFO: Initializing audio devices
Oct 29, 2015 2:58:12 PM org.jitsi.util.Logger info
INFO: Initializing video devices
Oct 29, 2015 2:58:12 PM org.jitsi.util.Logger info


INFO: Looking for configured audio devices.
Oct 29, 2015 2:58:12 PM org.jitsi.util.Logger info
INFO: Scanning for configured Video Devices.
Oct 29, 2015 2:58:12 PM org.jitsi.util.Logger info
INFO: Found Desktop Streaming 0 as a AVFRAME, class org.jitsi.impl.neomedia.codec.video.AVFrame video capture device.
java.lang.IllegalArgumentException: direction
    at org.jitsi.service.neomedia.AbstractMediaStream.assertDirection(AbstractMediaStream.java:101)
    at org.jitsi.impl.neomedia.MediaStreamImpl.setDirection(MediaStreamImpl.java:2496)
    at org.jitsi.examples.AVReceive2.initialize(AVReceive2.java:131)
    at org.jitsi.examples.AVReceive2.main(AVReceive2.java:349)
    at com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter.init(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

mediaStream.setDirection(MediaDirection.RECVONLY) 呼び出しによってエラーがスローされていると判断し、その要素をデバッグしようとしました。

4 つのポイント:

  1. setDirection() 呼び出しの直前に MediaDevice の toString() を吐き出すように AVReceiver コードを修正しました。作業中のコンピューターでは、次のようになります。

マイク (Realtek High Definition Audio) : wasapi:{0.0.1.00000000}.{8941227a-5fac-4416-b31b-728eb2665a82 LINEAR、48000.0 Hz、16 ビット、Mono、LittleEndian、Signed

LINEAR、48000.0 Hz、16 ビット、ステレオ、LittleEndian、符号付き

LINEAR、48000.0 Hz、8 ビット、モノラル、符号付き

LINEAR、48000.0 Hz、8 ビット、ステレオ、符号付き

LINEAR、22050.0 Hz、16 ビット、モノラル、LittleEndian、符号付き

LINEAR、16000.0 Hz、16 ビット、モノラル、LittleEndian、符号付き

LINEAR、11025.0 Hz、16 ビット、モノラル、LittleEndian、符号付き

LINEAR、8000.0 Hz、16 ビット、モノラル、LittleEndian、符号付き

動作していないデバイスでは、次のような一般的な toString() を取得します。

Org.jits.impl.neomedia.device.AudioMediaDeviceImpl@131d2bf

これは、MediaService がデバイスを適切に検出またはインスタンス化していないことを意味していると思います。MediaService.getDevice(MediaType.AUDIO,MediaUseCase.ANY) を使用して検索を拡張し、他のデバイスがあり、サービスが不良なデフォルト デバイスを取得しているかどうかを確認しましたが、検出されたデバイスは Impl クラスだけです。

  1. Libjitsi に落ち着く前に、JMF と FMJ の前駆体を通じて、「動作する」コンピューターについていくつかのツアーを行いました。私の「稼働中」のコンピューターには、他の「稼働していない」システムには存在しない構成がセットアップされている可能性がありますが、一生それを見つけることはできません。
  2. 必要なネイティブ dll がクラスパスに適切に配置されていることを確認しました。どちらのシステムも、それぞれのアーキテクチャに適した 32/64 ビット dll を実行しており、パス エラーやロード エラーは発生しません。間違いなく問題ではありません。
  3. 方向を設定しない場合、デバイスはオプションではない MediaDirection.INACTIVE 状態のままであると判断しました。

解決策を見つけようとして、または他の誰かがこの問題を抱えているかどうかを確認しようとして、私は何日もこれに取り組んできましたが、運がありません. Libjitsi の経験を持つ人は、何がこれを引き起こしているのか考えていますか??

どうもありがとう、

デビッド

4

0 に答える 0