首页| 论坛| 消息

回复: 用Qt和FFmpeg写了个播放器 QtAV库
#41 回 40楼(carmen816) 的帖子 [novesky 12-17 15:35]
很感谢你的回复,很有价值。同步那块里面的数字阿什么的有些是随便写的。同时用绝对时间(比如系统时间)来同步也想过,不过有个问题就是如果音频慢了怎么办?是重采样来降低音频播放速度还是直接丢掉一部分?我还没试过。不知道你怎么看。
硬解的话我也猜到了会和前几帧相关,但是能否丢掉特殊的帧呢?看了下I、P、B都是互相联系的,好像丢什么都不行。这样的话seek时就有问题了,直接从中间某一帧开始解,会崩溃。
另外,渲染视频画面是在gui线程,不在解码线程,这个跟Qt有关。
其他的我回家再看看。
#42 Re:回 40楼(carmen816) 的帖子 [carmen816 12-17 16:47]
引用第41楼novesky于2013-12-17 15:35发表的 回 40楼(carmen816) 的帖子 :
很感谢你的回复,很有价值。同步那块里面的数字阿什么的有些是随便写的。同时用绝对时间(比如系统时间)来同步也想过,不过有个问题就是如果音频慢了怎么办?是重采样来降低音频播放速度还是直接丢掉一部分?我还没试过。不知道你怎么看。
硬解的话我也猜到了会和前几帧相关,但是能否丢掉特殊的帧呢?看了下I、P、B都是互相联系的,好像丢什么都不行。这样的话seek时就有问题了,直接从中间某一帧开始解,会崩溃。
另外,渲染视频画面是在gui线程,不在解码线程,这个跟Qt有关。
其他的我回家再看看。
1.硬解的话我也猜到了会和前几帧相关,但是能否丢掉特殊的帧呢?看了下I、P、B都是互相联系的,好像丢什么都不行。这样的话seek时就有问题了,直接从中间某一帧开始解,会崩溃。
seek后,下一个I 帧之前的数据全部丢弃。音频需要跟着同步。

2.另外,渲染视频画面是在gui线程,不在解码线程,这个跟Qt有关。
最后渲染是在GUI线程没错,但是您对于帧的处理,超时丢弃,定时等待,格式转换,outputSet->sendVideoFrame,这些是在视频解码同一线程,并不是指最后画的过程。
视频解码线程通常情况比较忙,应该在一个空闲线程控制上述过程。
#43 回 42楼(carmen816) 的帖子 [novesky 12-17 18:10]
恩,谢谢,我回去试下。你是搞多媒体的吗?很专业啊。
#44 回 42楼(carmen816) 的帖子 [novesky 12-18 12:41]
AVPacket只能判断是否含有关键帧,我把没关键帧的丢了,还是崩溃。
#45 回 42楼(carmen816) 的帖子 [novesky 12-18 12:51]
看了下vlc的相关代码,好复杂,不过发现AVCodecContext.skip_frame = AVDISCARD_NONREF就不会崩溃了。默认的AVDISCARD_DEFAULT
只是跳过无用的包。

<< 7 8 9 10 11 >> (9/16)

回复 发表
主题 版块