Android(libstreaming)RTSP服务器可以播放视频但没有声音

时间:2017-08-25 09:42:44

标签: android audio video rtsp libstreaming

我使用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

由于

2 个答案:

答案 0 :(得分: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);
            ....
        }
    ....
}

我使用不同的网址解决了这个问题:

rtsp:MY_IP:1234?trackID=0

由于

答案 1 :(得分:0)

我有同样的问题。设置streaming method对我有用。

mSession.getVideoTrack().setStreamingMethod(MediaStream.MODE_MEDIACODEC_API_2);