【问题标题】:playing incoming video stream播放传入的视频流
【发布时间】:2010-05-30 20:23:04
【问题描述】:

我正在编写一个有点像视频流媒体的应用程序。客户端正在使用 udp 套接字接收视频流。现在当我接收到流时我想同时播放它。它与播放本地视频文件不同您的硬盘在这种情况下,它可以像使用系统(“vlc 文件名”)运行文件一样简单。但是这里涉及到许多问题,例如接收可能会延迟,播放器将不得不等待传入的数据。我有来了解使用vlc运行视频流。您能否详细说明使用vlc播放流的步骤。我正在用c ++实现我的应用程序。

编辑:有人可以给我一些关于 VLC API 的想法,它可用于将给定视频流式传输到特定目的地并在另一端接收该流并播放它。

关于, 马维亚

【问题讨论】:

    标签: c++ c video video-streaming vlc


    【解决方案1】:

    您可以随时查看VideoLan's own homepage 除此之外,流式传输非常简单:

    1. 决定支持流式传输的视频编解码器。 (很明显,可能已经完成了)
    2. 选择适当的数据包大小。
    3. 选择合适的视频质量。
    4. 在客户端:预缓冲至少 2 秒的视频和音频。

    数字 2 和 3 听起来很奇怪,但值得思考:

    如果您有宽带连接,则可以将大数据包发送到客户端。注意:这里的数据包是指客户端完全解码下一位视频所需的一致数据单元。如果您发送大数据包,例如 4 秒的视频,您可能会因为等待完整的数据单元(嗯,整整 4 秒)而延迟,而 0.5 秒的小数据包会让您延迟,但仍然可以识别且相对流畅的视频连接。

    质量也是如此。像素化和伪影缠身的视频很糟糕,口吃视频/声音不同步的视频更糟糕。而是切换到较低质量/较高压缩设置。

    如果您的问题纯粹是关于完成部分,那么第 1 点和第 4 点应该适合您。

    你可能会问: “如果我想做实时视频?” 上述所有建议仍然适用,但所有这些都必须更聪明地完成。首先要做的事情是:您无法在连接不良的情况下进行实时操作。这是现实的事情。如果您的连接足够宽,您几乎可以实时访问,只需泵出每个图像和一个小的声音样本,而无需太多处理或任何缓冲。有可能从中获得良好的客户体验,但这样的连接极不可能。这里的技巧通常是,传输的视频质量略低于理论上允许的连接,并且仍然在那里摆动缓存和数据包重新排序......玩得开心。很难。

    【讨论】:

    • 非常感谢您的回复。没有任何 VLC API 可以从应用程序中调用它们并使用此流接口吗?
    【解决方案2】:

    不幸的是,vlc 唯一的 API 是命令行或等效的命令行(您可以启动播放器实例,传递它们本质上是您在命令行上拥有的内容)。如果您需要多个实例或回调,您可以使用 libvlc,但它仍然非常不透明......

    【讨论】:

      猜你喜欢
      • 2012-08-11
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 2012-05-20
      • 2011-01-14
      • 1970-01-01
      • 2014-06-06
      • 2015-11-21
      相关资源
      最近更新 更多