【问题标题】:Media Element Display H264 bitstream [UWP]媒体元素显示 H264 比特流 [UWP]
【发布时间】:2021-12-10 21:39:17
【问题描述】:

我正在开发一个应该播放流视频的应用程序

我正在尝试在MediaElement 中播放 h264 流媒体视频,但 MediaElement 仍然为空

我使用FFmpeg作为视频源

ffmpeg -r 20   -f gdigrab   -i desktop   -f mpegts  -vcodec libx264 udp://127.0.0.1:5555 

在客户端 (UWP) 我使用 FFmpegInterop 库 正确检测视频的编解码器和分辨率,但MediaElement 不播放任何内容

我也尝试过使用 MJPEG,例如

ffmpeg -r 20 -f gdigrab -i desktop -f mjpeg -vcodec mjpeg udp://127.0.0.1:5555

一切正常。 RTSP 流也可以工作,例如来自 OBS studio,在这种情况下,编解码器定义为 h264

原来问题只能出在发送端?是否可以为此目的仅使用 UDP 协议?也许我错过了一些 FFmpeg 设置?

 private async void MediaPlayer_Loaded(object sender, RoutedEventArgs e)
    {
            MediaPlayer.Loaded -= MediaPlayer_Loaded;

            FFmpegInteropLogging.SetDefaultLogProvider();
            FFmpegInteropConfig options = new FFmpegInteropConfig();
            options.PassthroughVideoH264 = true;
            options.SkipErrors = 1000;
            options.PassthroughVideoHEVC = true;
            options.PassthroughVideoH264Hi10P = true;
           decoder = awaitFFmpegInteropMSS.CreateFromUriAsync("udp://127.0.0.1:5555",options);

            var mediaStreamSource = decoder.GetMediaStreamSource();
            mediaStreamSource.BufferTime = TimeSpan.FromSeconds(0);
            Debug.WriteLine(decoder.VideoStream.CodecName);

            MediaPlayer.MediaFailed += MediaPlayer_MediaFailed;
            MediaPlayer.SetMediaStreamSource(mediaStreamSource);
            MediaPlayer.Play();
}

【问题讨论】:

  • 有错误吗?是否触发了 MediaFailed 事件?
  • 您好,MediaFailed 事件未触发;我还在 MediaStreamSource 中添加了 SampleRequested 事件,我在其中输出 CurrentVideoStream 的各种属性以用于调试目的;例如宽度和高度,HardwareDecoderStatus。它有效,HardwareDecoderStatus = 可用。我注意到有时宽度和高度设置为 0x0,但重新启动应用程序可以解决此问题
  • SampleRequested 事件仅在我尝试播放 UDP/MJPEG 流或 RTSP h264 流时触发。如果我使用 ffmpeg -r 20 -f gdigrab -i desktop -f mpegts -vcodec libx264 udp://127.0.0.1:5555 SampleRequested 事件没有触发
  • UPD。似乎设置属性 VideoDecoderMode = VideoDecoderMode.ForceFFmpegSoftwareDecoder 解决了这个问题。
  • 很高兴听到这个消息。

标签: c# ffmpeg uwp h.264 mediaelement


【解决方案1】:

设置属性 VideoDecoderMode = VideoDecoderMode.ForceFFmpegSoftwareDecoder 解决了这个问题。

【讨论】:

    猜你喜欢
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多