FFme 播放某些视频导致程序崩溃

问题背景

ffmpeg相关 dll: 是由公司一个同事编译的
WPF播放器(FFme):在测试播放视频文件时,在播放一些手机拍摄的视频会导致程序直接闪退
问题视频尺寸: 540 * 360 和 360 * 640

排查过程

调试FFme源代码无果,然后测试过视频尺寸是否有关系,测试过windows(x86)后发现没有这个问题的存在。怀疑是ffmpeg的dll 可能存在问题。

问题定位

发现是FFmpeg(X64).dll swscale-5.dll这个dll会导致播放时崩溃,替换后。运行正常

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用 FFME 库和 .NET 6.0 来将 MP4 转换为视频流。下面是一个简单的示例: ```C# using System; using System.IO; using System.Windows.Media; using System.Windows.Threading; using Unosquare.FFME; class Program { static void Main(string[] args) { // 创建一个 MediaElement 实例 var mediaElement = new MediaElement(); // 注册 MediaOpened 事件处理程序 mediaElement.MediaOpened += (s, e) => { // 创建一个视频流 var videoStream = new VideoStream(mediaElement.NaturalVideoWidth, mediaElement.NaturalVideoHeight); // 读取视频帧并将其写入视频流 var timer = new DispatcherTimer(); timer.Interval = TimeSpan.FromSeconds(1 / mediaElement.NaturalVideoFramesPerSecond); timer.Tick += (s2, e2) => { if (mediaElement.Position >= mediaElement.NaturalDuration) { // 视频已经播放结束 timer.Stop(); videoStream.Complete(); return; } // 读取当前视频帧 var bitmap = new RenderTargetBitmap(mediaElement.NaturalVideoWidth, mediaElement.NaturalVideoHeight, 96, 96, PixelFormats.Pbgra32); bitmap.Render(mediaElement); var frame = BitmapSourceToByteArray(bitmap); // 将当前视频帧写入视频流 videoStream.Write(frame); }; timer.Start(); }; // 打开 MP4 文件 var uri = new Uri("path/to/your/file.mp4"); mediaElement.Source = uri; mediaElement.Play(); // 等待视频流写入完成 mediaElement.Dispatcher.InvokeShutdown(); } // 将 BitmapSource 转换为字节数组 static byte[] BitmapSourceToByteArray(BitmapSource bitmap) { var encoder = new JpegBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(bitmap)); using (var stream = new MemoryStream()) { encoder.Save(stream); return stream.ToArray(); } } } ``` 在这个示例中,我们创建了一个 MediaElement 实例来打开 MP4 文件并播放视频。当视频开始播放时,我们创建了一个视频流,并从每一帧中读取视频数据,将其写入视频流中。最后,我们等待视频流写入完成。 请注意,这只是一个简单的示例,你可能需要根据你的具体需求进行修改。另外,由于 FFME 库目前还不支持 .NET 6.0,你可能需要使用 .NET Standard 2.0 版本的库来实现这个功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值