将视频从 Unity 的相机目标纹理流式传输到 RTSP

问题描述 投票:0回答:1

我一直在尝试寻找将视频从 Unity 相机流式传输到 RTSP 流的方法。

到目前为止,我一直在这里尝试这个特定的插件 https://github.com/keijiro/FFmpegOut 它将相机的目标纹理作为输入,并将其作为 MP4 文件输出到磁盘上,并且 https ://github.com/aler9/rtsp-simple-server 作为简单的 RTSP 服务器

我最初的想法是,这就像更改原始 FFMPEG 命令行语法一样简单:

  "-y -f rawvideo -vcodec rawvideo -pixel_format rgba"
+ " -colorspace bt709"
+ " -video_size 800x600"
+ " -framerate 30"
+ " -pix_fmt yuv420p"
+ " test.mp4"

对此:

  "-y -re -f rawvideo -vcodec rawvideo -pixel_format rgba"
+ " -colorspace bt709"
+ " -video_size 800x600"
+ " -framerate 30"
+ " -pix_fmt yuv420p"
+ " -f rtsp -rtsp_transport tcp rtsp://127.0.0.1:8554/stream"

这适用于我可以在 VLC 播放器上观看的流媒体的前 4-5 秒。但在那之后,该进程就会挂起,我必须以相同的行为终止它,无论它是通过 Unity 编辑器运行还是作为独立运行。

非常感谢任何对此的帮助,或者关于我应该如何查明链的哪一部分可能崩溃的想法,甚至是我可以研究的替代插件/资源来实现这一目标。谢谢!

编辑:还查看了 Unity Player 和 Editor 日志,但没有任何错误消息。

unity-game-engine ffmpeg video-streaming rtsp
1个回答
0
投票

我可以确认这对我也有效。 我找不到实际原因或可能出现的错误,应该这样设置。

如果使用https://github.com/keijiro/FFmpegOut

public FFmpegPipe(string arguments)
    {
        // Start FFmpeg subprocess.
        _subprocess = Process.Start(new ProcessStartInfo {
            FileName = ExecutablePath,
            Arguments = arguments,
            UseShellExecute = false,
            CreateNoWindow = true,
            RedirectStandardInput = true,
            RedirectStandardOutput = true,
            RedirectStandardError = false
        });

        // Start copy/pipe subthreads.
        _copyThread = new Thread(CopyThread);
        _pipeThread = new Thread(PipeThread);
        _copyThread.Start();
        _pipeThread.Start();
    }

将 RedirectStandardError 更改为 false

作为额外的奖励,我花了一段时间才将 mediamtx.exe args 设置为平滑:

string ffmpegArgs = $"-y -f rawvideo -pix_fmt rgba -s {width}x{height} -r {frameRate} -i - " +
                $"-c:v libx264 -preset ultrafast -tune zerolatency -b:v 1M -g 30 -bufsize 8M -f rtsp -rtsp_transport tcp {rtspUrl}";
© www.soinside.com 2019 - 2024. All rights reserved.