gpt4 book ai didi

ffmpeg - 使用 FFMPEG 更改容器会产生 NAL 单元错误

转载 作者:行者123 更新时间:2023-12-04 23:00:25 28 4
gpt4 key购买 nike

背景:

我当前的视频文件放在基于 Linux 的系统中,该系统将内容 (RTP) 流式传输给其他用户。更改后我正在拍摄并将内容发送到服务器并确保编码正确我偶然发现问题。

我尝试过使用 ffmpeg ,但是我注入(inject)此文件的系统无法识别它并将其流式传输到另一台设备。

我正在 Windows 系统上进行所有的转码等

C:\Users\mazdak\Documents\Projects\ffmpeg\bin>ffmpeg -y -i input.mp4 -pix_fmt yuv420p -c:v libx264 -profile:v main -level:v 4.1 -color_range 0 -colorspace bt709 -x264opts colorprim=bt709:transfer=bt709:bframes=1 -an output.mkv

错误:
我得到的是
    StreamMedia exception ry: Unexpected NAL unit type: 9
(...)
StreamMedia exception ry: First media frame must be sync point

也许我没有为 RTSP 做准备?是不是这个问题。因为我看到的是能够流式传输的文件是使用 Gstreamer 编码的

所以我想..也许 ffmpeg不这样做吗?好吧,让我们给 gst-launch试一试。
我需要有关如何解决此问题的指示。

我有什么:
  • GStreamer的OSSBuild
  • ffmpeg utils
  • input.mp4 - H264 Main Profile L3.1 - 像素格式 yuvj420p
  • 容器中的音频

  • 我需要什么(可能):
  • output.mkv - H264 主要配置文件 L4.1 - 像素格式 yuv420p - 准备好 RTP(rtph264pay 模块)
  • 已删除音频

  • 我有 h264_analyze我拍摄的电影的输出。来自成功流式传输的电影,以及我尝试使用 ffmpeg 的电影

    最佳答案

    所以这个问题可以根据你想要做的事情走向一大堆不同的方向。这是一个非常基本的管道,它只是将 mp4 文件中的 h264 视频数据重新复用到 mkv 文件中。它忽略了音频。无需重新编码。

    gst-launch-0.10 filesrc location="bbb.mp4" ! qtdemux ! video/x-h264 !h264parse ! matroskamux ! filesink location=/tmp/bbb.mkv


    这是另一个管道,它对 mp4 文件进行解复用,使用开箱即用的 x264 设置对其进行重新编码,并将其重新复用到 mkv 文件中。

    gst-launch-0.10 filesrc location="bbb.mp4" ! decodebin2 !videoconvert ! x264enc ! h264parse ! matroskamux ! filesinklocation=/tmp/bbb2.mkv


    视频格式通常更像是一组数据,而不是单个文件。在顶层,您拥有容器格式(mp4、mkv 等),然后通常在这些容器中,您拥有以各种格式(h264 视频、AAC 音频等)存储的视频和音频数据。然后在流媒体级别,您有诸如 RTP(RTSP 是一种用于协商一个或多个 RTP 流的包装协议(protocol))和 MPEGTS 之类的协议(protocol)。
    您可能还想仔细检查您的相机正在制作什么。您可以在其上运行 ffprobe:

    ffprobe whatever.mp4


    您还可以尝试从头开始创建简单的测试视频,看看 GStreamer 是否可以制作您的服务器可以理解的任何内容。

    gst-launch-0.10 videotestsrc num-buffers=120 ! ffmpegcolorspace ! x264enc profile=main ! h264parse ! matroskamux ! filesink location=/tmp/main.mkv

    gst-launch-0.10 videotestsrc num-buffers=120 ! ffmpegcolorspace ! x264enc profile=baseline ! h264parse ! matroskamux ! filesink location=/tmp/baseline.mkv

    gst-launch-0.10 videotestsrc num-buffers=120 ! ffmpegcolorspace ! x264enc profile=high ! h264parse ! matroskamux ! filesink location=/tmp/high.mkv

    关于ffmpeg - 使用 FFMPEG 更改容器会产生 NAL 单元错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29840136/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com