炒沙作縻终不饱,缕冰文章费工巧。这篇文章主要讲述Android(libstreaming)RTSP服务器可以播放视频但没有声音相关的知识,希望能为你提供帮助。
我使用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
谢谢
另一答案【Android(libstreaming)RTSP服务器可以播放视频但没有声音】我有同样的问题。设置
streaming method
对我有用。mSession.getVideoTrack().setStreamingMethod(MediaStream.MODE_MEDIACODEC_API_2);
推荐阅读
- Android在画布上操纵图像 - 使用触摸,移动,放大/缩小,缩放
- 如何使用robolectric对Android音频录制应用进行单元测试
- 如何在Android中开发音频流应用程序()
- AudioFormat在android.media.AudioFormat中不公开
- Ionic 2 Native Audio Android上没有声音
- 使用闹钟音量设置的Android闹钟声音()
- 通过WiFi在Android手机之间流式传输语音
- 从Particle Photon触发Android上的音频
- 新的Web订单(内容优先设计概述)