Android - MediaRecorder 输出以流式传输 ffmpeg

标签 android ffmpeg video-streaming mediarecorder android-mediarecorder

我正在尝试将我的屏幕内容流式传输到 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...

那么,如何以可以在 ffmpeg 中用于流式传输的格式(而不是保存的文件)获取 MediaRecorder 的输出内容。

谢谢!

最佳答案

无法发表评论,所以即使为时已晚,我也会将其作为答案,但这个项目应该是您正在寻找的:https://github.com/danielkucera/ZidoStreamer

关于Android - MediaRecorder 输出以流式传输 ffmpeg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43220839/

相关文章:

android - 如何将 LD_PRELOAD 与 Android 的媒体服务器一起使用?

android - 如何使用ffmpeg在android中播放rtsp流

ffmpeg - xargs:未终止的引号

php - 跟踪视频播放

FFmpeg:如何将一个 100GB 的 MP4 文件拆分为多个 1GB 的文件?

android - 可以删除 build.gradle (app) 上的一些行

android - 未收到来自 GCM 的推送通知 (Android)

java - getLastKnownLocation() 总是返回 null,所有提供者都是 DummyLocationProvider

ffmpeg - 将两个视频垂直并排放置后如何提高质量?

react 原生视频 : How to manually select video quality