有没有办法使用 libvlc / libvlcsharp 以非交互方式转码或压缩 iOS 上的视频?

Is there a way to use libvlc / libvlcsharp to non interactively transcode or compress a video on iOS?

我正在使用 libVLCSharp(Xamarin 绑定到 libvlc 库)进行视频播放。我正在添加一个功能来将下载的视频转码/压缩到本地文件系统。通常我会为此使用 mobile-ffmpeg,但由于内部 VLC 使用具有不同构建配置的 ffmpeg,ffmpeg 转码不起作用 - android 它使应用程序崩溃,ios returns 'Invalid data found when processing input' 尝试转换时的错误消息。当卸载 libvlcsharp 并且只有一个 ffmpeg 库实例被使用时,代码工作正常。

所以,我正在寻找 Xamarin.iOS 的视频压缩/转码选项。

我查看了 libvlcsharp 的文档,听起来我们可以转码,但关于如何做到这一点有些模糊:

https://github.com/videolan/libvlcsharp/blob/3.x/docs/how_do_I_do_X.md

如何进行转码? 与您从 CLI 执行此操作的方式非常相似。阅读 https://wiki.videolan.org/Transcode/ 并使用 Media.AddOption 尝试媒体选项。

就我而言,我想以非交互方式/在应用程序后台进行转码。命令行界面中有一个 'dummy' 选项可以执行此操作,所以我想知道我们如何从 libvlc / libvlcsharp 执行此操作。

到目前为止,我在这些文档中的代码如下所示:

using(var vlc = new LibVLC())
{
    Media media = new Media(vlc, source, FromType.FromLocation);

media.AddOption($":sout=#transcode{{vcodec=h264,venc=x264{{cfr=40}},vb=2048,scale=auto,acodec=mp4a,ab=96,channels=2,samplerate=44100}}:std{{access=file,mux=ts,dst={destination}}}");

    media.AddOption("dummy");

    //How do I start the transcoding non interactively??
}

正如 libvlc discord 服务器上的回复,当你对视频进行转码时,它根本不显示,你不需要创建 VideoView,单独使用 MediaPlayer 就足够了。 剩下的就是找到正确的转码选项,您已经找到了正确的 wiki 页面。