【问题标题】:Play FLV data synchronously [closed]同步播放 FLV 数据[关闭]
【发布时间】:2013-01-28 12:09:54
【问题描述】:

我只是在调查http://www.broccoliproducts.com/softnotebook/rtmpclient/rtmpclient.php RTMP 客户端代码。它工作正常,因此它可以获取数据并将 FLV 文件保存在本地。

code 非常简单。所以我的问题是:

1.是否可以同步播放此流媒体? (因为缓存有一些延迟) (我尝试通过 VLC 打开写入文件,但它很忙...)

2。任何线索如何实现它?

!!!这不是这个项目的任何广告!我只需要在 WPF 中创建一些 RTMP 播放器。

【问题讨论】:

  • 你的意思是如何播放流而不是下载?同步是什么意思?播放直播?
  • @OnurYILDIRIM 是的,是的。不要将其保存到文件中,而是在屏幕上播放。
  • 一个.flv 仍然被认为是一个.swf 基本上正确吗?如果那是真的,您使用Com Objects?如果您确认我的上述言论属实,我会写一个简单的解决方案。
  • @Greg 好吧,如果可以使用 rtmp 流以某种方式播放它,请。

标签: c# .net media-player rtmp


【解决方案1】:

如果你有 Cygwin,你可以通过 tee 管道输出

rtmpdump -i "rtmp://server/app playpath=mp4:foo.mp4" | tee a.flv | vlc -

这会将输出保存到文件中,同时通过 VLC 播放流。如果你不想安装 Cygwin 我有 a small version 可用,仅 3.2 MB。你也可以找到tee 的Windows 版本。

【讨论】:

  • 嗯.. 谢谢!但我需要 C# 解决方案。
【解决方案2】:

一个通用的帖子,直到您提供一些额外的要求。

您将在 Flash 内部创建一个按钮,然后实现以下 ActionScript

on (press) {
    fscommand("Variable1", "Variable2");
}

然后在 Visual Studio 中,您需要为 Shockwave Flash Object 添加 COM Object 引用。您需要确保将 embed 设置为 true。

现在在 Visual Studio 中,您应该可以转到 Properties 并找到 fscommand,这将允许您物理连接 Flash 影片中的值。

AxShockwaveFlashObjects._IShockwaveFlashEvents_FSCommandEvent

这将在 Flash 中收集您的变量。例如,您只需使用e.commande.arg 来让收集的项目做某事。比如……

lbl_Result.Text="The " + e.args.ToString() + " " + e.command.ToString()+ " was clicked.";

现在您正在将 Flash 电影的数据从 Flash 传输到 Visual Studio。这很简单,很直接。

这将允许您的 C# 应用程序实际继承​​和利用您的 Flash 视频。

需要考虑的事项:

  • 确保已将 embed 设置为 true。这就是将所有Path References 物理保存在您的Flash 对象中的内容。否则可能会调用无效路径。

其他帮助参考:

  1. 在您的项目中打开Solution Explorer
  2. 右键点击ReferenceAdd Reference
  3. 转到COM Object

这些是可用的对象:

  • Shockwave ActiveX
  • Flash Accessibility
  • Flash Broker
  • Shockwave Flash

上述解决方案将让您在其本机环境中实际使用 Flash,您只需简单地传递变量数据或您希望以这种方式在 C# 中实现的控件。这样,您实际上可以直接使用 RTMP 到 Flash。您的 C# 应用程序只会公开 Flash 对象。

这是一种通用方法,当您提供一些额外信息时,我会更新以尝试更好地为您提供帮助。还有 F-In-The-Box、LibRTMP 等库,也可能有所帮助。

如我所说,上述内容非常通用;但它会调用您在 Flash 视频对象中记录的任何质量;那么你的 C# 可以像这样简单地调整它们:

<% MyYoutubeUtils.ShowEmebddedVideo("<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/gtNlQodFMi8&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/gtNlQodFMi8&hl=en&fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object>") %>

或者……

public static string ShowEmbeddedVideo(string youtubeObject)
{
    var xdoc = XDocument.Parse(youtubeObject);
    var returnObject = string.Format("<object type=\"{0}\" data=\{1}\"><param name=\"movie\" value=\"{1}\" />",
        xdoc.Root.Element("embed").Attribute("type").Value,
        xdoc.Root.Element("embed").Attribute("src").Value);
    return returnObject;
}

你可以在这里找到主题:Additional Embed Instructions and Details.

这就是您可以将 Flash 放入 C# 的方法,还有一些方法可以将您的 C# 输出到 Actionscript。但是,如果没有更多关于您尝试做什么的详细信息,我真的不能做比这些通用回复更多的事情。

请记住,这是假设您尝试将FLV 存储在您的应用程序中,或将数据从 C# 聚合到 Flash。我需要更多细节来进一步提供帮助。我不太清楚为什么需要 C# 以及您实际尝试做什么。

【讨论】:

    【解决方案3】:

    VLC 可以播放几乎任何源文件,并且绑定了多种语言。 .net 肯定在名单上。

    一个来源:sample
    更多信息:here

    看起来FluorineFX 也可以与 RTMP 服务器通信。不确定播放,但可以从 .net 访问 SharedObjects 及其同类。

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-08
      • 2013-05-11
      相关资源
      最近更新 更多