ChinaFFmpeg

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7331|回复: 3

[源码] 把AVPacket_sidedata 从demuxer 传递进muxer

[复制链接]
发表于 2019-3-10 12:03:26 | 显示全部楼层 |阅读模式
大师兄你好,最近一直在琢磨一件事情, 就是把 AVPacket 的 side_data 从最前面的demuxer 一路传到最后的muxer.

事情的缘由是RTSP源是自带 timestamp, 结合 RTCP的sender report 和NTP时间, 就可以算出 Rtsp 每个packet的 NTP时间。 我想把这个信息先暂时放在side_data 里面, 然后一路传到最后的muxer。

我自己做了一些尝试,在用 -codec copy 的情况下是成功的 (ffmpeg.c里面 av_copy_packet_side_data)。   然而,一旦使用了转码功能,因为新创建的 avpacket没有把源avpacket 的side_data 拷贝进来,所以不工作了。

我可以想到的唯一的办法就是把这个side_data 再拷到 frame_side_data里面,再从frame_side_data 拷贝到新创建的avpacket里,但是这个改动实在不太好看。

不知道大师兄有什么建议?


Thanks,
Jun


回复

使用道具 举报

 楼主| 发表于 2019-3-11 09:06:58 | 显示全部楼层
后来我有找到decode 的时候,AVPacket里的side_data 被放进了 AVFrame
https://github.com/FFmpeg/FFmpeg ... odec/decode.c#L1681

但是重新encode的时候, AVFrame的meta data 没有继续传递下去,所以想来想去只能改encoder
回复 支持 反对

使用道具 举报

发表于 2019-3-11 10:10:01 | 显示全部楼层
junli1026 发表于 2019-3-11 09:06
后来我有找到decode 的时候,AVPacket里的side_data 被放进了 AVFrame
https://github.com/FFmpeg/FFmpeg/b ...

decoder解析后,存到自己的结构里,然后设置encoder的时候设置进去
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-11 10:20:03 | 显示全部楼层
孙悟空 发表于 2019-3-11 10:10
decoder解析后,存到自己的结构里,然后设置encoder的时候设置进去

有一点是映射关系我没有找到,就是最后encoder出来的AVPacket, 找不到对应的原始的AVFrame;
如果能找到原始的AVFrame, 我就可以把frame->metadata 重新放到 AVPacket里面,最后Muxer就可以拿到了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|Archiver|ChinaFFmpeg

GMT+8, 2024-4-20 00:39 , Processed in 0.053945 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表