首页 > 编程知识 正文

完美解码怎么使用,ffplay源码分析

时间:2023-05-06 09:10:54 阅读:115474 作者:2954

3358 www.Sina.com/http://www.Sina.com/http://www.Sina.com/3358 www.Sina.com.Sina.com

ffplay分析(视频解码线程操作(版本: ffmpeg-4.2.1 )一、分析: 1、stream_component_open ) :视频解码线程视频_ thread video_open ) :打开视频解码: get_video_frame (调用解码完成的一帧数据4,get_video_frame ):decoder _ ddeo _ frame decoder_decoder ) )得到的decoder _ decode _ frame (:av codec _ receive _ frame ) )取得的结果是否恢复正常,还是退出循环7, 从decoder_decode_frame(:Packet )解码前)队列中更新的Packet8、decoder_decode_frame ) :判断获取的packet是否为flush Packet9 get_video_frame )和decoder_decode_frame ),获得解码后的一帧的数据,然后判断是否需要drop帧11和vided帧调用queue_picture (frame (解码后)队列12,queue _ picture ):frame_queue_peek_writable ) )的相应参数通过调用queue_picture ():av_Frame_move_ref )移动AVFrame-buffer,通过调用frame_queue_push ) (frame ) )

2、初始化video_thread(:timebase和framerate的操作

3、调用video_thread(:get_video_frame ) )获得已解码的1帧的数据

4、调用get _ video _ frame (:decoder _ decode _ frame ),获得解码后的1帧的数据

5、循环调用decoder _ decode _ frame (:av codec _ receive _ frame ) )获取解码后的帧数据

6、decoder _ decode _ frame (:av codec _ receive _ frame ) ) )获得的结果,判断是恢复正常还是退出循环向下移动

7、decoder_decode_frame ) :从Packet (解码前)队列获取新Packet

8、decoder_decode_frame (:判断获取的包是否为flush包

9,调用decoder _ decode _ frame (:av codec _ send _ packet ) )进行解码

10、调用get _ video _ frame (:decoder _ decode _ frame ),获得解码后的一帧的数据,然后判断是否需要drop帧

11、调用video_thread(:get_video_Frame ) )得到已解码的一帧数据后,计算该帧的pts/duration,并返回queue_picture )

12、调用queue _ picture (:frame _ queue _ peek _ writable ) )获取可写帧,并设置相应的参数

13、调用queue _ picture (:av _ frame _ move _ ref ) )移动AVFrame-buffer,调用frame_queue_push ) )进行frame )

14、video_thread () :视频解码线程退出处理,除非要求退出或异常退出。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。