Xamarin Mac FFmpeg 启动路径无法访问

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

我有一个支持Mac的Xamarin Forms项目,我正在尝试实现FFmpeg,所以我从其官方页面下载了静态构建,并将其添加到Mac项目的资源文件夹中,并在内容中添加了构建操作,然后我创建了一项服务,该服务基本上会从我使用 FFmpeg 命令在路径中指示的视频中删除音频,以执行我基于以下答案的服务,并将其改编为 C#: https://stackoverflow.com/a/37422688/8496520

问题是,当我尝试执行命令时,出现以下错误:

"NSInvalidArgumentException: launch path not accessible"

而且我也查不出为什么会出现这种情况,我在服务中使用了以下代码(调用 NSTask 的 Launch() 方法时出现错误):

public void ExecuteFFmpeg()
{
    try
    {
        var launchPath = NSBundle.MainBundle.PathForResource("ffmpeg", ofType: "");
        var compressTask = new NSTask();
        compressTask.LaunchPath = launchPath;
        compressTask.Arguments = new string[] {
            "-i",
            "downloads/test.mp4",
            "-c",
            "copy",
            "-an",
            "nosound.mp4" };
        compressTask.StandardInput = NSFileHandle.FromNullDevice();
        compressTask.Launch();
        compressTask.WaitUntilExit();
    }
    catch (Exception ex)
    {

    }
c# macos xamarin xamarin.forms ffmpeg
1个回答
1
投票

如果您不依赖 NSTask,您可以使用 CliWrapper 代替。

public static async ValueTask FfmpegRemoveAudio(string ffmpegPath, string inputFilePath, string outputFilePath)
{
    await Cli.Wrap(ffmpegPath).WithArguments(new[] { "-i", inputFilePath, "-c", "copy", "-an", outputFilePath }).ExecuteAsync();
}

除了 CliWrapper 之外,我还测试了 FfmpegCoreFFmpget.NET,它们也引发了一些类似的异常,如您所描述的。我没有胶水,为什么它们的行为不同。有关详细信息,请参阅完整的工作POC

© www.soinside.com 2019 - 2024. All rights reserved.