关键帧 关于decode_one_frame函数

田克平(94338047) 16:57:34
能自己设置某帧为关键帧吗?
抱柱者(86311414) 16:57:59
to 田克平
可以
田克平(94338047) 17:00:00
呵呵,把丢包后的下一帧设置为I帧可以吗?来处理丢帧现象
☆雪天/kf☆(279373002) 17:00:42
这个难度大了
田克平(94338047) 17:01:15
难度在哪?
抱柱者(86311414) 17:01:53
如果1to1那应该可行,但是要是传到多点那可能比较麻烦
田克平(94338047) 17:03:54
谢谢
抱柱者(86311414) 17:04:05
比如传至A、B两点,到A的丢包很少,而到B丢包较多,那A也要因为B点而经常接受关键帧
抱柱者(86311414) 17:04:29
不过你也可以现象折中的方法
抱柱者(86311414) 17:04:38
不过你也可以想想折中的方法
田克平(94338047) 17:04:48
就1to1的话、、、
田克平(94338047) 17:05:11
怎么做
抱柱者(86311414) 17:05:22
就像你说的做啊
抱柱者(86311414) 17:05:50
丢包了就通知编码端,下一帧编为关键帧
田克平(94338047) 17:06:07
好的,谢谢
☆雪天/kf☆(279373002) 17:06:16
田克平(94338047) 17:00:00
呵呵,把丢包后的下一帧设置为I帧可以吗?来处理丢帧现象

编码的时候你怎么会知道哪一帧会丢?


☆雪天/kf☆(279373002) 17:07:55
除非你有反馈通道
抱柱者(86311414) 17:08:58
肯定是反馈啊,正常可能是丢包了就通知编码端重发,现在改为通知编码端设置关键帧
傻子更聪明(120928606) 17:09:43
这样好象实时性比较差啊,也难免不会再被丢。
呵呵(369873095) 17:10:11
网络的来回时间考虑了吗(RTT)
☆雪天/kf☆(279373002) 17:10:15
这样效率很低呀
☆雪天/kf☆(279373002) 17:10:25
你编码器一直要等在那里
抱柱者(86311414) 17:11:07
他是设置下一帧为关键帧,而不是处理丢了的那一帧,所以实时性应该没有问题
田克平(94338047) 17:11:09
丢包了不通知吗
☆雪天/kf☆(279373002) 17:11:21
两次传输路径时间+解码器处理时间 编码器无法并行
☆雪天/kf☆(279373002) 17:12:25
就是说你反馈回来的时候 编码器已经编到后面去了 丢的哪一帧后面的一帧 早编完了
抱柱者(86311414) 17:12:57
编码器为什么要等?
编码器就按正常的编码,如果解码器反馈丢包了,应用程序就修改编码参数设置关键帧,与并行扯不上关系
田克平(94338047) 17:12:58
好像是这样啊
傻子更聪明(120928606) 17:14:09
网络UDP不可靠传输,多少秒来一个关键帧比较合适?
抱柱者(86311414) 17:14:16
为什么要局限于下一帧,下两帧也没关系啊
抱柱者(86311414) 17:14:35
反正只是要尽快出现一个关键帧就行了
☆雪天/kf☆(279373002) 17:15:13
你说的没错 但是一个反馈的时间编码器可能已经编码了好多帧了
☆雪天/kf☆(279373002) 17:15:56
所以只能说是一接到反馈就立即置I帧
☆雪天/kf☆(279373002) 17:22:06
可以结合周期插入I帧一起来用 周期可以大一点

田克平(94338047) 17:23:10
关键帧间隔是定好的、、、
抱柱者(86311414) 17:23:15
肯定是会有固定关键帧周期的
傻子更聪明(120928606) 17:23:48
这种方法是在关键帧间隔比较大的情况下可以用。
田克平(94338047) 17:24:42
2s间隔有什么问题
傻子更聪明(120928606) 17:25:06
而且非关键帧丢失后怎么处理?会有花屏之类的。
傻子更聪明(120928606) 17:25:39
把导致花屏的帧丢掉后,图象会有停顿。
田克平(94338047) 17:25:52
间隔很小的话当然是作用不大
☆雪天/kf☆(279373002) 17:25:58
那也没有办法 只能跳到下一个I帧
呵呵(369873095) 17:26:24
在码率大的时候,一帧的数据都是由几十个包承载的,多个包里掉一个包(几个包)是否反馈要求I帧
☆雪天/kf☆(279373002) 17:27:21
那倒不用 使用EC足够应付了
傻子更聪明(120928606) 17:27:22
网络传输应该不用I帧吧?把I帧全变为IDR帧,这样才有意义。
sunj(39310543) 17:28:42
这个问题有rfc来定义的
傻子更聪明(120928606) 17:28:42
错误掩藏,解码器不支持的话,怎么整。也需要编码器支持吧?。
sunj(39310543) 17:28:52
消息已经标准化了
☆雪天/kf☆(279373002) 17:29:34
简单的块copy就可以搞定这个了 不需要编码器做什么
傻子更聪明(120928606) 17:31:12
这样子,也是会引起连续的失真。。

☆雪天/kf☆(279373002) 17:22:06
可以结合周期插入I帧一起来用 周期可以大一点

田克平(94338047) 17:23:10
关键帧间隔是定好的、、、
抱柱者(86311414) 17:23:15
肯定是会有固定关键帧周期的
傻子更聪明(120928606) 17:23:48
这种方法是在关键帧间隔比较大的情况下可以用。
田克平(94338047) 17:24:42
2s间隔有什么问题
傻子更聪明(120928606) 17:25:06
而且非关键帧丢失后怎么处理?会有花屏之类的。
傻子更聪明(120928606) 17:25:39
把导致花屏的帧丢掉后,图象会有停顿。
田克平(94338047) 17:25:52
间隔很小的话当然是作用不大
☆雪天/kf☆(279373002) 17:25:58
那也没有办法 只能跳到下一个I帧
呵呵(369873095) 17:26:24
在码率大的时候,一帧的数据都是由几十个包承载的,多个包里掉一个包(几个包)是否反馈要求I帧
☆雪天/kf☆(279373002) 17:27:21
那倒不用 使用EC足够应付了
傻子更聪明(120928606) 17:27:22
网络传输应该不用I帧吧?把I帧全变为IDR帧,这样才有意义。
sunj(39310543) 17:28:42
这个问题有rfc来定义的
傻子更聪明(120928606) 17:28:42
错误掩藏,解码器不支持的话,怎么整。也需要编码器支持吧?。
sunj(39310543) 17:28:52
消息已经标准化了
☆雪天/kf☆(279373002) 17:29:34
简单的块copy就可以搞定这个了 不需要编码器做什么
傻子更聪明(120928606) 17:31:12
这样子,也是会引起连续的失真。。

 

 

main()
{
...
     while (decode_one_frame(img, input, snr) != EOS);
...
}

然后在decode_one_frame()

{
     ...
    currSlice->next_header = -8888;
    .....
     while ((currSlice->next_header != EOS && currSlice->next_header != SOP))
     {
            current_header = read_new_slice();
            if (current_header == EOS)
            {
                  exit_picture();
                  return EOS;
             }
            decode_slice(img, inp, current_header);
                 ...
       }
     ...
     exit_picture();
     return (SOP);
}

按照上面的代码,经过跟踪发现,currSlice->next_header 一直不变,那么decode_one_frame()中的while循环永远不会因为条件的不满足而跳出循环,只会因为current_header == EOS条件的满足而推出该函数。
因此 decode_one_frame()函数只可能返回EOS,而不会是SOP;那么main()中的while循环将只会执行一次。而且在代码跟踪的过程中发现,输入码流的所有序列是在decode_one_frame()函数中全部解出,然后才推出该函数。
请教各位,jm为什么要这样呢?还是我什么地方没注意到?谢谢了

A:再次仔细跟踪了一下代码发现,jm整个解码的结构是这样的:
1。在main中调用while (decode_one_frame(img, input, snr) != EOS);
但实际上,这个while只会循环一次,因为decode_one_frame()只可能返回EOS(下面讲为什么?)
2。在decode_one_frame()中通过调用
    while ((currSlice->next_header != EOS && currSlice->next_header != SOP))
    {
         current_header = read_new_slice();
         if (current_header == EOS)
         {
               exit_picture();
               return EOS;
         }
         decode_slice(img, inp, current_header);
                ...
   }
解码所有帧。如上所述,currSlice->next_header根本没有起到任何作用,因为没有其他地方为 其赋值,为什么呢?
因为如果要想知道next_header必须要将下一个slice码流读进来,再进行解析,既然已经读进来,不管判断的是一个新的pic,还是同一个pic中的新的slice,都必须立刻进行解码,也就没有必要再回到main()中的while循环了。
实际上起作用的是current_header,即通过read_new_slice()来获得,(sop or sos):
       if(is_new_picture())
       {
      init_picture(img, input);

      current_header = SOP;//start of pic
       }
       else
      current_header = SOS;//start of slice

如果current_header=sop,那么将会调用init_picture(),这个函数主要实现两个功能:首先,通过exit_picture()把上一次解码的图像及相关信息进行保存等处理 然后,再为当前slice(新的一帧)的解码做好准备。如果current_header=sos,那么将不会调用init_picture(),直接利用当前pic的准备信息进行解码。如果在read_new_slice()中发现已经到码流的结尾了,那么将返回EOS.


这时在decode_one_frame()中,一旦current_header==EOS,那么将退出解码,返回到main()中来。值得注意的是,返回之前,它还是调用了exit_picture(),从而将最后一个解码帧进行保存。

大概流程应该就是这样,如果有漏掉或错误的地方还请高手补充指正。总之jm中的有些函数的内容并不一定与其函数名称相吻合,这可能也是他们开发到后期没有办法的事情。不知道x264或其他的解码器是不是如此复杂?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455657.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不出现php version网页_php冷知识 - 从命令行参数列表中获取选项

分享一个php的冷知识 - ,从命令行参数列表中获取选项用到的函数是getopt 说明函数签名是这样的getopt ( string $options [, array $longopts [, int &$optind ]] ) : array|bool false解析传入脚本的选项,成功返回数组,解析失败返回fals…

【机器学习】opencv-摄像头中的人脸采集

本次在视频识别的程度上增添了摄像头实时识别, 区别在于: # v cv2.VideoCapture(./dzd2.mp4) v cv2.VideoCapture(0) import numpy as npimport cv2face_detector cv2.CascadeClassifier(./haarcascade_frontalface_alt2.xml) # v cv2.VideoCapt…

[计算机视觉][神经网络与深度学习]Faster R-CNN配置及其训练教程2

faster-rcnn分为matlab版本和python版本,首先记录弄python版本的环境搭建过程.matlab版本见另一篇:faster-rcnn(testing): ubuntu14.04caffecuda7.5cudnn5.1.3opencv3.0matlabR2014a环境搭建记录 首先,进入官方github网站:https://github.com/rbgirshick/py-faster-…

modbus从站模拟软件_作为工控电气人,你知道我们必备的软件有哪些吗?

作为工控电气人,你知道我们必备的软件有哪些吗?今天我就来给大家介绍一下,工控电气人常用的几款软件,有了它们,我们的工作学习将会更易上手,效率翻倍。以下介绍主要是分为电工常用软件,PLC编程软…

错误检测dP-bitstream-ei_flag runRestrictRef

JM86模型,对于错误检测,dP->bitstream->ei_flag在什么情况下置1?还是无错的时候dP->bitstream->ei_flag0,有错时dP->bitstream->ei_flag等于一个较大的无效值? 看下所有给 dP->bitstream->ei_…

【数据分析】豆瓣电影Top250爬取的数据的可视化分析

豆瓣Top250网址 将之前爬取到的豆瓣电影进行简单的可视化: 数据列表保存为CSV格式,如图 导入数据 做好准备 #!-*- coding:utf-8 -*- import pandas as pd import numpy as np import matplotlib.pylab as plt import re from numpy import rank from bu…

sqlmap的二次开发

1、sqlmapapi的帮助信息。 -s 启动sqlmap作为服务器 -h 指定sqlmap作为服务器的IP地址,默认127.0.0.1 -p 指定sqlmap服务器的端口,默认端口为8775 2、启动服务 浏览器访问: 3、api介绍:sqlmap项目下的api.py文件含有所有的api adm…

Django创建第一个应用

Django创建第一个应用 1,创建应用 Django自带一个实用程序,可以自动生成应用程序的基本目录结构,因此您可以专注于编写代码而不是创建目录。 要创建您的应用程序,请确保您与目录位于同一目录,manage.py 并键入以下命令&#xff1…

docker nginx配置_docker随手笔记第十二节 jenkins+docker+nginx+纯静态页面配置

docker随手笔记第一节 docker概念及安装docker随手笔记第二节 docker常用命令解析docker随手笔记第三节 docker构建java镜像docker随手笔记第四节 docker安装mysql5.7docker随手笔记第五节 docker安装redis4.0docker随手笔记第六节 docker安装jenkinsdocker随手笔记第七节 jenk…

【机器学习】逻辑斯蒂回归原理

逻辑斯蒂函数 引入: 在线性感知器算法中,我们使用了一个f(x)x函数,作为激励函数,而在逻辑斯蒂回归中,我们将会采用sigmoid函数作为激励函数,所以它被称为sigmoid回归也叫对数几率回归(logistic …

。。。。。etc 时域错误隐藏个人理解

三个文件名以 erc 开头的文件就是 EC 相关的文件。EC 的入口在 exit_picture 函数中,从 ercStartSegment 开始到 ercConcealInterFrame 结束。你自己做一个丢包之后的码流,把程序跑起来跟踪一下 EC 过程,慢慢分析代码。 错误隐藏过程在整个帧…

手机影音第十一天,显示视频缓冲,显示卡顿时的网速,播放系统视频时调用播放器的选择...

代码已经托管到码云,有兴趣的小伙伴可以下载看看https://git.oschina.net/joy_yuan/MobilePlayer一、设置视频缓冲进度显示视频播放进度的效果图如下:灰色的是缓冲的进度。原理:只有播放网络视频时,才有缓冲这个说法,所…

Django之创建应用以及配置路由

Django之创建应用以及配置路由 配置所有IP都可以访问你的项目 1.进入manage.py同级的my_web里面的settings.py的文件 2.在文件的第28行把ALLOWED_HOSTS []改成ALLOWED_HOSTS [*] 注意:*代表的是所有IP都可以访问 创建一个app应用 在终端中,结束项目…

python中opencv是什么_python-opencv的用法

#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import cv2 # 接收两个参数,一个是文件名,一个值,如果值为1,接收的是彩色图片,如果值为零,接受的是灰度图片。会有一个返回值&#xff0c…

openjudge 14:求10000以内n的阶乘

14:求10000以内n的阶乘 总时间限制:5000ms内存限制:655360kB描述求10000以内n的阶乘。 输入只有一行输入&#xff0c;整数n&#xff08;0<n<10000&#xff09;。输出一行&#xff0c;即n!的值。样例输入100 样例输出933262154439441526816992388562667004907159682643816…

【Tensorflow】卷积神经网络实现艺术风格化通过Vgg16实现

卷积神经网络实现艺术风格化 基于卷积神经网络实现图片风格的迁移&#xff0c;可以用于大学生毕业设计基于python&#xff0c;深度学习&#xff0c;tensorflow卷积神经网络&#xff0c; 通过Vgg16实现&#xff0c;一幅图片内容特征的基础上添加另一幅图片的风格特征从而生成一幅…

抗误码技术

抗误码技术&#xff1a; 视频传输过程中的错误是不可避免的&#xff0c;抗误码技术历来都足视频领域一个研究的热点。H264标准继承r以前视频编码标准中某些优秀的错误恢复工具&#xff0c;同时也改进和创新了多种错误恢复丁具。这些错误恢复的工具主要有&#xff1a;参数集、数…

Linux统计文件行数、字数、字节数

2019独角兽企业重金招聘Python工程师标准>>> 语法&#xff1a;wc [选项] 文件 说明&#xff1a;该命令统计给定文件中的字节数、字数、行数。如果没有给出文件名&#xff0c;则从标准输入读取。wc同时也给出所有指定文件的总统计数。字是由空格字符区分开的最大字符…

tkinter中鼠标与键盘事件

tkinter中鼠标与键盘事件&#xff08;十五&#xff09; 本文转自Tynam Yang的博客园 import tkinterwuya tkinter.Tk() wuya.title("wuya") wuya.geometry("300x2001020")bt tkinter.Button(wuya,text鼠标进入打印) bt.pack()def func(event):print(鼠…

html解析のBeautifulSoup

引子&#xff1a; 使用python爬虫对爬取网页进行解析的时候&#xff0c;如果使用正则表达式&#xff0c;有很多局限&#xff0c;比如标签中出现换行&#xff0c;或者标签的格式不规范&#xff0c;都有可能出现取不到数据&#xff0c;BeautifulSoup作为一个专门处理html格式的py…