gpt4 book ai didi

ffmpeg - 使用 libavformat 解复用和解码原始 RTP

转载 作者:行者123 更新时间:2023-12-04 23:18:55 32 4
gpt4 key购买 nike

我正在实现一个管道,我在内存中接收入站 RTP 数据包,但我无法弄清楚如何设置 libavformat 来处理/解包 RTP 数据包。
我有所有必要的底层编解码器的相关信息,但由于它是 h264,我不能简单地剥离 RTP header 。我用 goInputFunction 创建输入上下文每次调用写入一个数据包。

void *readbuf = av_malloc(1500);
AVIOContext *avioreadctx = avio_alloc_context(readbuf, 1500, 0, transcoder, &goInputFunction, NULL, NULL);
AVFormatContext *inputctx = avformat_alloc_context();
inputctx->pb = avioreadctx;
inputctx->flags |= AVFMT_FLAG_CUSTOM_IO;
当我用 avformat_open_input(&inputctx, NULL, NULL, NULL) 打开它时它反复调用 read 函数,但实际上并没有进展。我怀疑是因为 RTP 流本身没有足够的信息来完全描述编解码器?如果我把它放在外面,那么 av_read_frame(inputctx, input_packet)沿着路段错误,我猜是因为输入上下文未初始化。
所以对于我的问题,是否可以手动设置 SDP 通常设置的编解码器详细信息?
我正在寻找一个示例,说明如何手动配置 AVFormatContext 以在没有 SDP 的情况下使用 RTP 数据包并设置 UDP 端口监听器。

最佳答案

事实证明,这可以通过使用未记录的标志 FLAG_RTSP_CUSTOM_IO 来实现。 .我在这里详细说明了如何做到这一点:https://blog.kevmo314.com/custom-rtp-io-with-ffmpeg.html

关于ffmpeg - 使用 libavformat 解复用和解码原始 RTP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71000853/

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