我正在尝试将屏幕内容流式传输到rtmp服务器,我相信最简单/最好的方法就是使用ffmpeg。
所以,这是我到目前为止所拥有的:
try {
Socket socket = new Socket(url, port);
ParcelFileDescriptor fileDescriptor = ParcelFileDescriptor.fromSocket(socket);
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mMediaRecorder.setOutputFile(fileDescriptor.getFileDescriptor());
mMediaRecorder.setVideoSize(DISPLAY_WIDTH, DISPLAY_HEIGHT);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mMediaRecorder.setVideoEncodingBitRate(512 * 1000);
mMediaRecorder.setVideoFrameRate(30);
int rotation = getWindowManager().getDefaultDisplay().getRotation();
int orientation = ORIENTATIONS.get(rotation + 90);
mMediaRecorder.setOrientationHint(orientation);
mMediaRecorder.prepare();
} catch (IOException e) {
e.printStackTrace();
}
在这里,重要部分是
Socket socket = new Socket(url, port);
ParcelFileDescriptor fileDescriptor = ParcelFileDescriptor.fromSocket(socket);
mMediaRecorder.setOutputFile(fileDescriptor.getFileDescriptor());
所以,当我把它放在Asynctask中时,我可以尝试发送一些东西,但我得到一个UnknownHostException
java.net.UnknownHostException: Unable to resolve host "rtmps://rtmp-api....": No address associated with hostname
所以,我被告知我应该使用ffmpeg代替,但我不知道如何从MediaRecorder获取原始流以将其传递给ffmpeg。
如果我理解正确,请将ffmpeg用作:
-i original_stream rtmps://rtmp-api...
那么,我怎样才能获得MediaRecorder的输出内容,我可以在ffmpeg中使用这种格式进行流式传输(而不是保存的文件)。
谢谢!
答案 0 :(得分:0)
无法评论所以我会留下这个作为答案,即使它有点太晚了,但这个项目应该是你想要的:https://github.com/danielkucera/ZidoStreamer