【发布时间】:2021-04-18 12:07:17
【问题描述】:
我想使用 Unosquare 的 FFME 库 (v4.2.330) 显示来自 Cam Link 4K hdmi 采集卡的实时流。但是,使用以下代码,即使媒体已成功打开,媒体元素仍保持黑色并且没有引发异常。
<ffme:MediaElement x:Name="media"
Background="Black"
MediaEnded="media_MediaEnded"
MediaOpened="media_MediaOpened"
MediaFailed="media_MediaFailed"
MediaInitializing="media_MediaInitializing"
LoadedBehavior="Play"
UnloadedBehavior="Manual"
/>
private void OnLoaded(object sender, RoutedEventArgs e)
{
this.media.Open(new Uri("device://dshow/?video=Cam Link 4K"));
}
private void media_MediaInitializing(object sender, Unosquare.FFME.Common.MediaInitializingEventArgs e)
{
e.Configuration.PrivateOptions["framerate"] = "50";
e.Configuration.PrivateOptions["video_size"] = "1920x1080";
e.Configuration.PrivateOptions["vcodec"] = "rawvideo"; //also tried mjpeg
e.Configuration.PrivateOptions["pixel_format"] = "yuyv422"; //also tried yuv420p
}
private void media_MediaFailed(object sender, Unosquare.FFME.Common.MediaFailedEventArgs e)
{
log.Error(e.ErrorException);
}
使用 VLC 播放器一切正常,所以我想这与MediaInitializing 期间设置的参数有关。为了获得正确的参数,我运行了ffmpeg -f dshow -i video="Cam Link 4K" 输出
Input #0, dshow, from 'video=Cam Link 4K':
Duration: N/A, bitrate: N/A
Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422, 1920x1080, 50 fps, 50 tbr, 10000k tbn, 10000k tbc
通过运行ffmpeg -f dshow -pix_fmt yuv420p -i video="Cam Link 4K" -framerate 50 -vcodec mjpeg test.mkv,我可以将所有内容记录到文件中。
在启动过程中,我设置了Unosquare.FFME.Library.FFmpegDirectory = @"C:\ffmpeg";,我将 ffmpeg 4.2.1 (win64) 的预构建二进制文件和共享库放置在其中。我还确保我的项目是针对 x64 的。由于MediaElement 适用于常规 mp4 文件,我不确定我缺少哪些参数/设置。
【问题讨论】: