我需要解码来自现场DVR摄像机的H264流。 为了便于举例,我将DVR摄像机的RAW流存储在以下文件中(test.h264):http://f.zins.com.br/test.h264
要解码直播,我按照以下ffmpeg示例:https://github.com/FFmpeg/FFmpeg/blob/master/doc/examples/decode_video.c
如果我用VLC打开.h264测试,图像看起来很完美。 如果使用 avformat_open_input 和 avformat_find_stream_info 使用ffmpeg解码.h264测试,则图像看起来也很完美。
但如果我使用https://github.com/FFmpeg/FFmpeg/blob/master/doc/examples/decode_video.c示例进行解码,则图像都会失真。我认为这是因为H264流可以同时拥有音频。
启用ffmpeg的调试,它会显示以下很多错误:
[h264 @ 092a9b00] Invalid NAL unit 0, skipping.
[h264 @ 092a9b00] Invalid NAL unit 0, skipping.
[h264 @ 092a9b00] Invalid NAL unit 0, skipping.
[h264 @ 092a9b00] error while decoding MB 16 1, bytestream -28
[h264 @ 092a9b00] Invalid NAL unit 8, skipping.
[h264 @ 092a9b00] Invalid NAL unit 8, skipping.
[h264 @ 092a9b00] Invalid NAL unit 8, skipping.
我有没有办法只过滤实时流中的视频和忽略音频? 否则,是否有任何解决方案使用decode_video.c示例解码test.h264而不扭曲帧?
答案 0 :(得分:2)
该流包含原始h264数据包的mpeg包装,我们需要先将它们解复用。如果您无法提供包含某些protocol supported by ffmpeg(例如 udp:// )的网址,则应为您的直播流构建自定义 AVIOContext 并将其传递给< / p>
avformat_open_input(&fmt_ctx, NULL, NULL, NULL)
类似于this example。
现在您可以使用
启动常用的分路器循环av_read_frame(fmt_ctx, &pkt)