gpt4 book ai didi

ffmpeg - DirectShow RTSP SourceFilter 与 MPEG-4 视频流

转载 作者:行者123 更新时间:2023-12-04 23:17:40 26 4
gpt4 key购买 nike

我使用 FFmpeg 创建了一个简单的直接显示源过滤器。我从 RTSP 源读取 rtp 数据包并将它们提供给解码器。 它适用于 h264 流。

MyRtspSourceFilter[H264 Stream] ---> h264 Decoder --> Video Renderer

坏消息是它不适用于 MPEG-4。 我可以将我的 rtsp 源过滤器与 MPEG-Decoder 连接起来。我没有异常(exception),但视频渲染器没有显示任何内容。 实际上只显示一帧然后什么都没有 [只是停止]...解码器和渲染器是第 3 方,所以我无法调试它们。
MyRtspSourceFilter[MP4 Stream] ---> MPEG-4 Decoder --> Video Renderer

我可以使用 FFmpeg 成功地从 MPEG-4 RTSP 源获取 rtp 数据包。没有问题。

It seems that i have not set something(?) in my Rtsps Source Filter which is not necessary for H264 stream but may be important for MPEG-4 stream



什么可能导致直接显示 rtsp 源过滤器中的这个 h264 流和 MPEG-4 流不同? 有任何想法吗。

更多信息:

-- 首先,我为 MPEG-4 流尝试了一些其他 rtsp 源过滤器......虽然我的 rtsp 源是相同的,但我在它们的引脚连接中看到了不同的子类型。

-- 其次,如果源真的是 MPEG-4,我真的很怀疑,所以我用 FFmpeg 进行检查......FFmpeg 将源编解码器 ID 设为“CODEC_ID_MPEG4”。

更新:
[破解]

我只是设置 m_bmpInfo.biCompression = DWORD('xvid') 它工作得很好......但它是静态的。 如何动态获取/确定这个值使用 ffmpeg 或其他方式...

最佳答案

我在 RTSP 服务器端,需要逐帧转换的不同用例

MP4 file ---> MPEG-4 Decoder --> H264 Encoder -->  RTSP Stream
将部署 libav ,这是ffmpeg的内核。
编辑:
使用 H264 编码的视频层,视频只需要从
根据 MPEG-4 规范的某些“附件 B”,以长度为前缀的文件格式“AVCC”到字节流格式。 libav 提供所需的比特流过滤器“h264_mp4toannexb”
MP4 file ---> h264_mp4toannexb_bsf -->  RTSP Stream
现在,为了解码 RTSP:
视频和音频来自不同的 channel 。解析和解码 H264 流在这里完成: my basic h264 decoder using libav
音频是另一回事:
RTP Transport建议,AAC 帧被封装在 ADTS 中,像 VLC 这样的 RTSP 播放器期望平面 AAC 和相应的可用 RTSP 服务器实现 AACSource::HandleFrame()捏住 ADTS header 。
另一个不同的是“时间戳和 RTP”:
VLC 不支持补偿音频和视频之间的时间偏移。几乎每个 RTSP 生产者或消费者都有时间偏移的约束或未记录的假设;您可能会考虑使用额外的延迟管道来补偿 RTSP 源的偏移。

关于ffmpeg - DirectShow RTSP SourceFilter 与 MPEG-4 视频流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7650601/

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