【问题标题】:How to convert RTP H.264 payload into playable file using Media Foundation如何使用 Media Foundation 将 RTP H.264 有效负载转换为可播放文件
【发布时间】:2014-09-08 05:29:26
【问题描述】:

我需要一种能够从使用托管媒体聚合 - https://net7mma.codeplex.com/ 接收的 H.264 RTPFrames(有效负载类型 96)制作视频文件的方法。

我正在尝试在托管代码中使用媒体基础。

我看到了http://mfnet.sourceforge.net/,但我找不到怎么做。 我看到有人在某个论坛上说最好在 C# 托管代码中使用 Media Foundation dll。

有人有这方面的经验吗?

编辑:

我试图使用 VLCDotNet 将 h264 帧放入视频文件 - 这是我的代码

private void StoreFile()
{

    Vlc.DotNet.Core.VlcContext.LibVlcDllsPath = @"C:\Users\Ofek\Desktop\VideoLAN\VLC";
    Vlc.DotNet.Core.VlcContext.Initialize();

    media1 = new Vlc.DotNet.Core.Medias.LocationMedia("rtsp://192.168.30.11/1.mkv");         

    media1.AddOption(":sout=#transcode{vcodec=theo,vb=800,
    scale=1,acodec=flac,ab=128,channels=2,samplerate=44100}:std{access=file,mux=ogg,
    dst=D:\\123.mp4}");

    VlcControl control = new VlcControl();
    control.Media = media1;
    control.Play();
}

问题是文件已创建,但无法播放。 我正在寻找将 H264 流保存到 mp4 文件而不解码的命令。 有什么想法吗?

【问题讨论】:

  • 你真的需要为此使用MF吗? MFNet 项目不再受到其作者的支持,MS 也没有提供官方的 C# 包装器。您可能可以使用 COM 互操作,但编写本机组件并从 C# 代码调用它会更容易。此外,还有一个similar question,其中vlc bindings 用于将流保存到mp4 文件。
  • 感谢您的回答。使用哪个库或代码对我来说并不重要,它不一定是 mp4 文件。我有充满 H264(有效负载类型 96)的 RTP 数据包,我想放入某个容器中。真的不知道哪些容器适合H264,看了一些关于mp4、avi、mkv的东西。有什么想法吗?
  • 我会先尝试使用来自that answer 的转码示例的 VLCDotNet。
  • 我试过了,给出一个例外 - “媒体尚未初始化时无法设置选项”。我在我的问题中编辑了代码
  • 你应该把端口放在rtsp地址的末尾。 “rtsp://localhost/live/Testing:554/h264”。检查播放器正在播放的路径并使用相同的路径。

标签: c# video ms-media-foundation


【解决方案1】:

尝试在后台播放流作为一个进程。

Process vlc;
vlc = Process.Start("C://Program Files//Videolan//VLC//VLC.exe", "rtsp://192.168.30.11/1.mkv\" --qt-start-minimized --sout=#transcode{vcodec=theo,vb=800,acodec=flac,ab=128,channels=2,samplerate=44100}:file{dst=C://folder//filename.mp4,no-overwrite}");
Thread.Sleep(9000);
vlc.kill();

【讨论】:

  • 感谢您的回答。您给 Process.Start 的参数是否有可能出错?因为整个命令 ("--qt-start.... sout=#transcode") 没有作为字符串传递.. 只是确保参数应该像这样传递
  • @user1662033:编辑了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-17
相关资源
最近更新 更多