我正在使用 libVLCSharp(Xamarin 绑定到 libvlc 库)进行视频播放。我正在添加一项功能,将下载的视频转码/压缩到本地文件系统。通常我会为此使用mobile-ffmpeg,但由于内部VLC使用具有不同构建配置的ffmpeg,ffmpeg转码不起作用 - android它会使应用程序崩溃,ios在尝试时返回“处理输入时发现无效数据”错误消息兑换。当卸载 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 尝试媒体选项。
就我而言,我想以非交互方式/在应用程序的后台进行转码。命令行界面中有一个“虚拟”选项可以执行此操作,所以我想知道我们如何从 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??
}