关于ffplay源码之serial变量的说明

本文详细描述了FFplay中的serial变量在文件重定位事件中的作用,如发生跳转时如何更新serial值以及与音频、字幕和视频流队列的关系。重点在于连续性标记和数据流管理。
摘要由CSDN通过智能技术生成

serial翻译为连续的,在ffplay中是用于判断播放是否连续的标志,serial变量存在于自定义的多个结构体中

以下为read_thread中,音视频文件发生跳到时的操作。

static int read_thread(void *arg)
{
    ......
    for (;;) {
        if (is->seek_req) {		/*发生文件重定位事件*/
            ......
            /*重定位文件*/
            ret = avformat_seek_file(is->ic, -1, seek_min, seek_target, seek_max, is->seek_flags);
            if (ret < 0) {
                av_log(NULL, AV_LOG_ERROR,
                       "%s: error while seeking\n", is->ic->url);
            } else {   
                if (is->audio_stream >= 0)
                    packet_queue_put(&is->audioq);
                if (is->subtitle_stream >= 0)
                    packet_queue_put(&is->subtitleq);
                if (is->video_stream >= 0)
                    packet_queue_put(&is->videoq);
                ......
            }
            is->seek_req = 0;
            is->queue_attachments_req = 1;
            ......
        }
/*压入队列*/
static int packet_queue_put(PacketQueue *q, AVPacket *pkt)
{
    AVPacket *pkt1;
    ......
    ret = packet_queue_put_private(q, pkt1);
    ......
    return ret;
}
static void packet_queue_put_private(PacketQueue *q)
{
    ......
    q->serial++;
    ......
}

也就是在seek后serial会加1,会产生变化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值