【问题标题】:video streaming using libvlc into buffer使用 libvlc 将视频流式传输到缓冲区
【发布时间】:2015-01-20 05:14:39
【问题描述】:

我正在努力从文件中获取流到我的缓冲区,以便我可以通过我的自定义端口/协议发送它,我遇到了几个问题,所以请帮助我

我在哪里:

  • 阅读https://wiki.videolan.org/Stream_to_memory_(smem)_tutorial/的教程后,我可以编译和运行

  • 我已经对smem 选项进行了以下更改以处理视频(请参阅最后提到的完整代码)

      sprintf(smem_options, "#transcode{vcodec=RV32}:smem{video-postrender-callback=%lld,video-prerender-callback=%lld}",
      // We are using transcode because smem only support raw audio and video formats
      (long long int)(intptr_t)(void*)&handleStream, (long long int)(intptr_t)(void*)&prepareRender);
    
  • 我可以看到 prerender 和 postrenders 都被调用并且正在提供数据

我的问题:

  • 目前为了测试输出,我将缓冲区直接转储到文件中,例如fwrite (p_pixel_buffer, sizeof(char), i_size, myfile); 但是 VLC 播放器或任何其他流播放器都没有读取转储的文件,所以我确定我在这里遗漏了一些东西,因为如果我要求 VLC 播放器通过提供完整的转码值直接写入文件,那么一切都很好

      sprintf(smem_options,
          "#transcode{vcodec=theo,vb=800,acodec=vorb,ab=128,channels=2,samplerate=44100}:file{dst=stream-output.ogg}"
      );
    

我的问题

  • 从缓冲区读取是否正确?因为我读过

首先,一个快速警告:从 VLC2.2(当前 git 版本,到 即将发布),size参数是size_t。没有API smem (但是?希望这会改变),这很糟糕,所以这会 默默地破坏你的应用程序。

来自Get frame from video with libvlc smem and convert it to opencv Mat. (c++)

如果是,那么 * 有没有其他 API 可以让我挂钩和获取缓冲区?

如果不是那么 * 我正在做的事情有什么问题,我需要做什么才能完成这项工作?

任何指针/示例程序都会有很大帮助。

PS:

【问题讨论】:

    标签: streaming video-streaming libvlc


    【解决方案1】:

    您的代码和过程看起来正确,但您可能无法打开结果数据的原因是因为您将原始图像数据写入缓冲区,该缓冲区只是 BGR 或其他像素数据,而不是 VLC 将打开的视频文件.使用 SMEM 接口,您基本上是在告诉 VLC 将哪种输出格式转码到内存中,因此在您为 OpenCV 链接的示例中,它们正在转码为 BGR 或其他可以在 cv::Mat 结构中使用的东西来显示。

    【讨论】:

      【解决方案2】:

      您还可以查看为 C++ 中的 smem 模块编写的 this sample code。它不保存缓冲区,但至少提供了一种方便的方式来访问视频和音频的缓冲区。

      不得不说,当前的 VLC 2.2.4 在与 smem 模块一起转码流时存在问题。最新的 3.0.0 nightly builds seam 解决了这个问题。

      您也可以使用 libvlc_video_set_callbacks、libvlc_video_set_format_callbacks、libvlc_audio_set_callbacks 和 libvlc_audio_set_format_callbacks 函数来访问数据。详情请参阅sample codea discussion

      【讨论】:

        猜你喜欢
        • 2017-06-07
        • 2014-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-18
        • 2016-07-25
        • 1970-01-01
        • 2012-02-19
        相关资源
        最近更新 更多