我使用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
谢谢
我追踪了源代码,发现服务器没有收到音频流的请求,只收到了视频流的请求。
在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
谢谢
我有同样的问题。设置streaming method
对我有用。
mSession.getVideoTrack().setStreamingMethod(MediaStream.MODE_MEDIACODEC_API_2);