【问题标题】:Capture video stream with FFmpeg使用 FFmpeg 捕获视频流
【发布时间】:2013-03-02 04:25:24
【问题描述】:

我编写了一个 android 应用程序,它通过套接字从摄像头向我的计算机发送实时视频流。是否可以使用 FFmpeg 解码 MPEG4 视频流以及如何实时显示相机所看到的内容?我猜我必须根据它从字节流中获得的最新信息创建一个位图,并以 20+ FPS 的速度在计算机上显示它。

我将如何去做这样的事情? C++、C# 或 Java 都可以。据我了解,FFmpeg 是用 C++ 编写的

【问题讨论】:

    标签: android c++ ffmpeg video-streaming mpeg-4


    【解决方案1】:

    首先,您是想自己创建一个视频播放器,还是只想看您的直播?因为当您已经拥有视频流时,几乎所有现代视频播放器都可以播放流媒体。尝试使用VLC(使用 FFmpeg)。在 VLC 中,只需点击“媒体”->“打开网络流...”并填写您的 URL。

    其次,FFmpeg 是用 C (C99) 编写的。 FFmpeg 本身只是一个转换媒体的工具。当您想创建自己的程序时,可以使用 FFmpeg 库(libavcodec、libavformat 等)。

    【讨论】:

    • 我不需要创建视频播放器,我只需要看到流。据我了解,使用 VLC 读取流是使用 rtp 和/或 rtsp,它们是建立在视频流之上的协议。此外,我将使用手机上的 4G 互联网运行应用程序,并将其流式传输到我的计算机。如果我了解 vlc 和 rtp 一般如何工作,则流的来源是服务器。这不起作用,因为我的无线公司 (AT&T) 在 4G 模式下运行时会阻止端口。
    • 所以 libavcodec 包含解码 MPEG4 视频流所需的代码。解码后的视频流给了我什么?我能实时看到流的最新帧吗?编码流也没有标头,因为标头是在您完成录制后添加的。但我是从摄像机现场直播的,所以我需要能够在没有标题的情况下做到这一点。这可能吗?
    • 是的,您需要以其中一种可能的协议提供视频流,这是最简单的方法。不要发明轮子制作自己的插座解决方案。这些协议包含用于查看视频的标题。此外,libavcodec 仅包含编码/解码视频的代码。因此,您还需要 ffmpeg 中的其他库,例如使用 libavformat 和其他一些库从流中读取。因此,只需尝试从您的设备中获取一个体面的流以在 VLC 中打开,因为该程序具有所有需要的 ffmpeg 库。
    • 那么是的,您几乎可以实时查看您的直播。根据您的设置,流总是会有一点延迟。尽量保持你的 GOP 规模小。标头将在传输流中提供。
    • “所以试着从你的设备中获取一个像样的流以在 VLC 中打开”-Nick van Tilborg。我不能使用 VLC,因为流的源必须是服务器。使用 rtp 和 rtsp 对流进行编码听起来也不必要地复杂。对视频流进行解码并提取最新帧的图片不是最简单的吗?
    猜你喜欢
    • 2011-11-26
    • 1970-01-01
    • 2020-05-23
    • 2011-05-19
    • 2013-07-12
    • 1970-01-01
    • 2023-03-07
    • 2012-10-14
    • 1970-01-01
    相关资源
    最近更新 更多