温州做网站推广,免费企业邮箱登录,网站策划书10个点怎么写,免费制作简历模板网站8、设置I/O中断机制 在 demux 时,我们首先需要调用 avformat_open_input() 打开一个输入,然后循环调用 av_read_frame() 函数来读取输入。 我们要注意的是: avformat_open_input() 和 av_read_frame() 都是阻塞函数,如果不能读取到足够的数据,那么它们将会一直阻塞…8、设置I/O中断机制 在 demux 时,我们首先需要调用 avformat_open_input() 打开一个输入,然后循环调用 av_read_frame() 函数来读取输入。 我们要注意的是: avformat_open_input() 和 av_read_frame() 都是阻塞函数,如果不能读取到足够的数据,那么它们将会一直阻塞。对于读取本地文件而言,这不是什么问题,但当我们读取的是网络上的实时流时,尤其是网络的情况不太好的情况下,就可能导致这个长时间的阻塞。 而在实际的代码中,我们可能不能让它们一直阻塞在这里,我们需要超过一定时长时返回,去处理其他一些事情,然后再尝试去重新调用这两个函数,去读取数据,这时候,我们就需要设置中断机制。 第一种方法是,使用 option 来设置中断,不同的协议需要使用的 option 也不太一样,比如 rtsp ,它使用私有选项 stimeout 设置中断,tcp 使用私有选项 timeout 设置中断等等。使用时,需要去查询相关协议的具体说明。 //设置rtsp超时
AVDictionary* opts = NULL;
//设置tcp or udp,默认一般优先tcp再尝试udp
av_dict_set(opts, "rtsp_transport","tcp" 或"udp", 0);
av_dict_set(opts, "stimeout", "1000000", 0);//设置超