video-streaming - 可以从 RTP 流中提取 profile-level-id 和 sprop-parameter-sets 吗?

标签 video-streaming h.264 rtsp rtp

我正在尝试将实时视频从我的 android 手机流式传输到我 PC 上的桌面 RTSP 服务器。流式视频可以在另一台设备上播放。我正在使用 H.264 视频编码器,因此服务器返回的 SDP(作为 DESCRIBE 请求的回复)应该包含 profile-level-idsprop-parameter-sets字段。

Spydroid项目展示了如何通过解析从记录到 SD 卡的虚拟文件中提取这些信息(来自 avcC block )。但我不能那样做。在 Spydroid 中,媒体记录器和 RTSP 服务器位于同一设备上,因此服务器始终可以在流式传输之前记录具有与记录器相同配置的测试文件。但我将视频作为 RTP 流直接从手机流式传输到远程服务器。

所以我的问题是:

  • 如何将这些值提供给维护协议(protocol)的服务器?
  • 有没有办法从 RTP 流中找出这两个字段?

  • 编辑:

    我正在使用 android 手机生成流,但服务器可以从任何来源接收 RTP 流。那么,是否有任何通用的方法来获取这些值?

    最佳答案

    您可以提取 profile-level-id从序列参数集 NAL 单元(实际上,如果参数集甚至在流中发送),它是 NAL header 之后的前 3 个字节。即,来自 3.0 级基线配置文件流的 SPS NAL 单元的前四个字节如下所示:
    67 42 00 1E
    忽略第一个字节,这只是表明它是一个 SPS NAL 单元(0x67 & 0x1F == 0x7 SPS 是 NAL 类型 7,PPS 是 NAL 类型 8)。其他 3 个字节为您提供配置文件、约束标志和级别(实际上,它只是第 3 个字节中的级别乘以 10)。
    sprop-parameter-sets是Base64编码的Sequence Parameter Sets和Picture Parameter Sets,用逗号隔开。所以只需 Base64 编码 SPS 和 PPS NAL 单元(Nal 类型 7 和 NAL 类型 8)并用逗号分隔,你应该很高兴。

    关于video-streaming - 可以从 RTP 流中提取 profile-level-id 和 sprop-parameter-sets 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12338594/

    相关文章:

    android - 如何启动/停止 FFMPEG 流?

    go - 使 httputil.ReverseProxy 转发响应流正确

    audio - 实时RTSP/RTP流式传输几分钟后,音频会引入喀哒声

    android - Android 中的视频流

    c++ - ffmpeg:transcoding.c 问题

    Android RTP SDP X264 问题(有音频,但没有视频)

    encoding - FFmpeg:在 Windows 上使用 AMD GPU 编码 x264?

    c++ - RTCP/RTP 通讯问题

    flutter - 有没有办法在 flutter vlc player 中处理网络缓存选项?

    node.js - 如何从 nodejs 中的远程 url 创建可读流?