0

我使用 libstreaming 在 Android 上创建 RTSP 服务器。然后,我用另一部手机连接到服务器来播放直播。我希望服务器可以使用它的摄像头和麦克风录制视频然后在客户端播放。连接后,视频可以正常播放,但没有声音。

以下是我的 RTSP 服务器代码的一部分:

    mSession = SessionBuilder.getInstance()
            .setSurfaceView(mSurfaceView)
            .setPreviewOrientation(90)
            .setContext(getApplicationContext())
            .setAudioEncoder(SessionBuilder.AUDIO_AAC)
            //.setAudioQuality(new AudioQuality(16000, 32000))
            .setAudioQuality(new AudioQuality(8000, 16000))
            .setVideoEncoder(SessionBuilder.VIDEO_H264)
            //.setVideoQuality(new VideoQuality(320, 240, 20, 500000))
            .build();

    mSession.startPreview(); //camera preview on phone surface
    mSession.start();

我搜索了这个问题,有人说我应该在SessionBuilder.java中修改目标端口。

我尝试如下修改它,但它仍然不起作用

    if (session.getAudioTrack() != null) {
        Log.e("SessionBuilder", "Audio track != null");
        AudioStream audio = session.getAudioTrack();
        audio.setAudioQuality(mAudioQuality);
        audio.setDestinationPorts(5008);
    }

有人知道这个问题的原因吗?

顺便说一句,我在另一部手机上使用 VLC 播放器作为客户端。我使用以下行连接到服务器

rtsp:MY_IP:1234?h264=200-20-320-240

谢谢

4

2 回答 2

0

我有同样的问题。为我设置streaming method工作。

mSession.getVideoTrack().setStreamingMethod(MediaStream.MODE_MEDIACODEC_API_2);
于 2018-11-05T04:06:06.723 回答
0

跟踪源码发现服务器没有收到音频流的请求,只收到了视频流的请求。

在 RtspServer.java 中设置连接后,接收到的 trackID=1。

(trackID=0 表示 AudioStream && trackID=1 表示 VideoStream)

public Response processRequest(Request request) throws IllegalStateException, IOException {
        ....
        else if (request.method.equalsIgnoreCase("SETUP")) {
            ....
            boolean streaming = isStreaming();
            Log.e(TAG, "trackId: " + trackId);
            // received trackID=1 which represent video stream
            mSession.syncStart(trackId);
            ....
        }
    ....
}

我通过使用不同的 URL 解决了这个问题:

rtsp:MY_IP:1234?trackID=0

谢谢

于 2017-08-28T03:07:56.710 回答