• player stop处理


    几乎所有的播放器都是基于ffmpeg,所以这就用ffmpeg 来说吧.

    大家都只是stop其实做了几个处理,一个是暂停播放,另外一个就是将播放位置seek到0点上.


    除了这些,其实内部在seek的时候将播放队列的buffer 全部都清空了.


    为了不纸上谈兵,这里就贴一段ffplay的代码

     if (is->seek_req) {
                int64_t seek_target= is->seek_pos;
                int64_t seek_min= is->seek_rel > 0 ? seek_target - is->seek_rel + 2: INT64_MIN;
                int64_t seek_max= is->seek_rel < 0 ? seek_target - is->seek_rel - 2: INT64_MAX;
    //FIXME the +-2 is due to rounding being not done in the correct direction in generation
    //      of the seek_pos/seek_rel variables
    
                ret = avformat_seek_file(is->ic, -1, seek_min, seek_target, seek_max, is->seek_flags);
                if (ret < 0) {
                    fprintf(stderr, "%s: error while seeking\n", is->ic->filename);
                }else{
                    if (is->audio_stream >= 0) {
                        packet_queue_flush(&is->audioq);
                        packet_queue_put(&is->audioq, &flush_pkt);
                    }
                    if (is->subtitle_stream >= 0) {
                        packet_queue_flush(&is->subtitleq);
                        packet_queue_put(&is->subtitleq, &flush_pkt);
                    }
                    if (is->video_stream >= 0) {
                        packet_queue_flush(&is->videoq);
                        packet_queue_put(&is->videoq, &flush_pkt);
                    }
                }
                is->seek_req = 0;
                eof= 0;
            }

    seek完之后调用flush把缓冲队列的所有内容清空,包括音频,视频,字幕等数据.


  • 相关阅读:
    老王python博客
    python中文分词
    python 字典(dict)get方法应用
    python yield和generators(生成器)
    python ASCII返回对应的值(chr)
    python 字符串特点
    python 包的定义,结构,导入过程
    fabric的安装和配置
    python 正则表达式re findall
    python unittest单元测试方法和用例
  • 原文地址:https://www.cnblogs.com/weinyzhou/p/2808474.html
Copyright © 2020-2023  润新知