由于压缩处理的方式不同,视频中的画面帧就分为了不同的类别,其中包括:I 帧、P 帧、B 帧。I 帧是内部编码帧(也称为关键帧),P 帧是前向预测帧(前向参考帧),B 帧是双向内插帧(双向参考帧)。 简单地讲,I 帧是一个完整的画面,而 P 帧和 B 帧记录的是相对于 I 帧的变化。如果没有 I 帧,P 帧和 B 帧就无法解码。 B 帧 B 帧(Bi-directional predicted frames),B 帧图像采用双向时间预测,可以大大提高压缩倍数。 值得注意的是,由于 B 帧图像采用了未来帧作为参考,因此 MPEG-2 编码码流中图像帧的传输顺序和显示顺序是不同的。 解码也是按接收到的视频流去解,接收一帧解码一帧,解码顺序: IPBBB 而解码顺序和显示顺序不同,我们需要按 PTS 重新调整解码后的帧,即: I B B B P PTS: 12345 DTS:
什么是I帧、P帧、B帧?I帧:intra picture,帧内编码帧。 P帧:predictive-frame,前向预测编码帧。通过将图像序列中前面已编码帧的时间冗余信息充分去除来压缩传输数据量的编码图像,也称为预测帧。 * B帧需要参考其前一个I帧或者P帧及其后面的一个P帧来生成一张完整的视频画面,P帧与B帧去掉的是视频帧在时间维度上的冗余信息。 B帧特点:1)B帧是由前面的I或P帧和后面的P帧来进行预测的;2)B帧传送的是它与前面的I或P帧和后面的P帧之间的预测误差及运动矢量;3)B帧是双向预测编码帧;4)B帧压缩比最高,因为它只反映参考帧间运动主体的变化情况 在没有B帧的情况下,DTS和PTS的输出顺序是一样的。因为B帧的双向预测打乱了解码和显示的顺序,所以一旦存在B帧,PTS与DTS势必就会不同。
在视频压缩编码中,所有的帧被分成了三个种类,I帧,B帧和P帧,其实就是Intra-Prediction帧,Bi-prediction帧和Prediction帧。 顾名思义,就是帧内预测帧,双向预测帧以及(单向)预测帧。 (inter prediction),帧内预测的话就是在找参照块的时候,只在当前帧内寻找;而帧间预测的话,找参照块的时候会在相邻的帧之间去找相似块。 因此,基于上述所说, 如果说当前帧是只在当前帧内寻找参照块的话,那么该帧就是I帧 如果在已经编码的帧里面寻找参照块的话,那么它是P帧 如果既在已编码的帧里去寻找参照块,又在未来将要被编码的帧里去寻找参照块的话 ,那么该帧就是B帧。
B帧中的B就代表双向(Bi-Directional)。 参考B帧和非参考B帧 我们在上文中学过,B帧可以参考两帧或者多帧,通常,(根据其位置)一帧在前,一帧在后。我们也已知道,I帧不参考任何帧,P帧只参考前面的帧。 那么问题来了——任何帧都能使用B帧作为它的参考帧吗? 答案是肯定的。 如果B帧可以作为参考帧,它就被称为参考B帧。 如果B帧不用作参考帧,它便被称为非参考B帧。 与非参考B帧相比,大部分解码器在量化参考B帧时会获得更好的质量,从而减少传播损失。 在视频压缩/流化中使用I、P和B帧 在理解了I帧、P帧和B帧的工作原理之后,我们来解决一个重要问题:为什么要使用它们? 在下面内容中,我们会学习I帧、P帧和B帧在视频压缩中最重要的用例。
前两天检测网站,发现有条连接的前边出现了一个空格,还删不掉,用 F12 看了下出现了一个 u200B 的字符,非常古怪。 没怎么仔细研究,直接替换了事。 ($(".XX").text()).replace(/u200B/g,'')
OBS推流平台是我们做桌面推流直播经常会用到的推流工具,也有用户将OBS平台和EasyDSS平台结合起来,搭建线上课堂方案,关于如何使用OBS,大家可以通过下文参考一下:如何使用OBS推流平台进行转推。 分析现场后,得知客户是使用 OBS 推送文件到系统中,该文件中包含 B 帧,因此需要在推流端设置不包含B帧,即可解决该问题。 OBS默认的输出模式如下: 默认的输出模式为简单模式,首先修改输出模式为高级。 如下图: 然后在配置(Profile)中选择“baseline”,位置如下图: 点击确定后,即可成功设置,推送的 rtmp 流即可不包含B帧,客户端播放也不再卡顿。
P帧:P帧指的是前向参考帧,它需要参考前一帧的图片才能够正确把数据解码出来。 B帧:B帧指的是双向参考帧,它需要参考前一帧数据和后一帧数据才能够正常把数据解码出来。 P帧:P帧又称之为前向参考帧,此帧的特点是需要参考前一帧的图像信息才可以正确把图像解码出来。P帧指的是这一帧和前一帧的差别,并通过将图像序列中已经编码后的冗余信息充分去除来压缩传输数据量的编码图像。 B帧:B帧也称之为双向参考帧,B帧的特点是以前面的帧(I帧或者P帧)或者后面的帧(也是I帧、P帧)作为参考帧找出B帧的预测值,并且取预测差值和预测矢量进行传送。 所以在拉流端解码B帧的时候不仅需要获得前面的缓存视频,还需要获得后面的缓存视频才能够正常解码B帧。所以,B帧虽然压缩率更高,但是更消耗CPU资源。 通常来说,I帧所占用的字节和体积大于P帧、而P帧所占用的字节大于B帧。所以在码率不变的情况下,可以调整GOP的长度去改善画质,GOP的长度越长,所得到的P帧和B帧更多,画面的质量和细节就会更好。
必备软件及网站我们这次的教程是以 teams,B 站(哔哩哔哩)还有 OBS 为主的,所以在开始之前希望大家可以安装好 teams 还有 OBS 并注册一个 B 站的直播账号。 站: https://www.bilibili.com/软件和 B 站的注册我就不在这里写了,大家可以自行摸索一下,很简单的。 基础设置打开 B 站的,把鼠标放在右侧的头像上,应该可以看到如下画面点击直播中心然后点击我的直播间将直播分类还有房间标题选择好就可以点击开始直播了。 OBS 配置打开 OBS 你应该看到如上图界面。我们点击设置按钮,会看到如下画面最为初学者,不建议大家过多修改这些内容,我们关系的是推流那个选项。 我们点击推流选项会看到如下画面服务:选择自定义服务器: 将 B 站的 rtmp 地址粘贴进来串流密码:将 B 站的直播码粘贴进去完成以上操作后,恭喜你已经完成了开播的 80%的任务了。
mpeg4的每一帧开头是固定的:00 00 01 b6,那么我们如何判断当前帧属于什么帧呢?在接下来的2bit,将会告诉我们答案。 注意:是2bit,不是byte,下面是各类型帧与2bit的对应关系: 00: I Frame 01: P Frame 10: B Frame 为了更好地说明,我们举几个例子,以下是16 进制显示的视频编码: 00 00 01 b6 10 34 78 97 09 87 06 57 87 …… I帧 00 00 01 b6 50 78 34 20 cc 66 b3 89 …… P帧 00 00 01 b6 96 88 99 06 54 34 78 90 98 …… B帧 下面我们来分析一下为什么他们分别是I、P、B帧 0x10 = 0001 0000 0x50 = 0101 0000
of Pictures ) 的 第一帧 , 画面组 内 还有 P 帧 和 B 帧 ; I 帧 是 P 帧 和 B 帧 的 参考帧 ; I 帧 的 质量 决定了 同组 P 帧 和 B 帧 解码后的 一系列 ; 如 : 压缩效果达到 6:1 ; " 关键帧压缩法 " 可以有效地去除 视频的 " 空间冗余信息 " ; 三、 P 帧 - 前向预测帧 1、P 帧简介 P 帧 全称 " 前向预测帧 ( Predicted Frames ) " , 是 视频编码 中的一种 帧类型 , P 帧 采用 前向预测编码方式 , 根据 本帧 ( P 帧 ) 与 相邻的 前一帧 ( I 帧 或 P 帧 ) 的 不同点来压缩本帧数据 , 不能参考 B 帧 ; 只记录 不同点 , 这样可以 充分去除 图像序列 中 前面已编码帧 的 时间冗余信息 来压缩传输数据量的编码图像 P 帧 又被称为 " 预测帧 " ; P 帧 中的 图像数据并不是完整的 I 帧 才能完成解码 ; P 帧 只记录了 与 I 帧 不同的内容 , 也就是 只有 与 I 帧的 差异部分 , 相同的部分没有 ; 解码 P 帧 , 必须 先解码 I 帧 ; I 帧 解码完成后 ,
一、B 帧 - 双向内插帧 1、B 帧简介 B 帧 全称 " 双向内插帧 ( Bi-directional Predicted Frames ) " , 采用 双向预测编码方式 , 也就是 B 帧 记录的是 本帧 B 帧 与 前后 I 帧 或 P 帧 的差别 ; 注意 : B 帧 需要依赖于其前的最近的一个 I 帧 或者 P 帧 及其后的最近的一个 P 帧 进行解码 , B 帧 不能 依赖与 B 帧 ; B 帧 依赖的 前一帧 可以是 I 帧 或者 P 帧 ; B 帧 依赖的 后一帧 肯定是 P 帧 , 不可能 是 I 帧 ; 要解码B帧 , 不仅要取得之前的缓存画面 , 还要解码之后的画面 , 通过 前后画面帧 与 本帧 共 3 帧的 数据叠加 取得最终的画面 ; B 帧 压缩率高 , B 帧 的 压缩 与 解码 对计算机的性能要求较高 ; 2、B 帧解码案例 B 帧解码时 , 需要参考 前后 两帧 数据 ; 下面的 三帧 数据进行解码时 , 首先 , 解码 I 帧关键帧 , 然后 , 解码 P 帧 , 根据 I 帧 解码 P 帧 , 最后 , 解码 B 帧 , 根据 I 帧 和 P 帧 解码 B
而正是这个优化出现了一点问题,现象如下: 已经判断播放点 A 和 Seek 点 B 不在一个 GOP 内,然后执行 av_seek_frame 方法还是把时间点 A 所在 GOP 全部解码了,导致播放上出现了卡顿 这里就很奇怪了,明明判断不在一个 GOP ,那 Seek 时就应该从时间点 B 所在 GOP 的 I 帧开始解码, 但执行时还是解码了上一个 GOP 的内容。 在没有 B 帧的情况下,I 帧的 PTS 等于 DTS ,所以判断不会出问题。 然而正是有了 B 帧,如果 I 帧的 PTS 和 DTS 不相等的话,那么上面的判断相当于是拿一个 PTS 值和 I 帧的 DTS 比较是否同一个 GOP 了。 帧,DTS 值为 0 ,有 B 帧,那么首帧的 DTS 值就可以用来做偏差值进行计算了。
TRTC产品有多种音视频流上行的方式,其中,可以通过OBS等推流设备,使用RTMP协议给TRTC后台上行音视频数据。 2)推上来的流含有B帧场景:这里不再科普I帧、B帧、P帧的概念。B帧作为双向预测帧,会在编解码中引入额外的延迟,因此在直播活动中,通常建议不要携带B帧。 当推流到TRTC含有B帧,有可能造成画面抖动。 排查建议:最简单的直接查看OBS中的推流配置即可。确保profile选择的是baseline。图片P.S. 为什么选baseline就没有B帧了H264有4种常见编码画质级别,分别为Baseline profile、Extended profile、Main profile、High profile,依次提高 其中Baseline是基本画质,近支持I帧、P帧,天生不含B帧,所以OBS中配置baseline就不会编码B帧。这里仅列举推流端的两种常见异常情况,其他原因建议腾讯云工程师协助排查。
目前国内外直播平台有大量主播正在使用 OBS 采集画面、布置直播间以及推流,无需改变使用习惯,即可快速将直播内容 RTMP 推流到实时音视频TRTC房间中 。 - RTMP 协议推流使用手册 - OBS 推流设置 准备工作 安装并打开 OBS(https://obsproject.com/download? 设置输出 RTMP 后台不支持传输 B 帧,用户可以通过如下设置调整推流端软件的视频编码参数来去除 B 帧。 FPS 是视频帧率,它控制观看视频的流畅,普通视频帧率有24帧 - 30帧,低于16帧画面看起来有卡顿感,而游戏对帧率要求比较高,一般小于30帧游戏会显得不连贯。 查看 OBS 底部工具栏的 控件,单击 开始推流。 2. 推流成功后,正常情况在界面底部会展示推流状态,TRTC 控制台仪表盘上有该用户进房记录。
本文作者twowinter,转载请注明作者:http://blog.csdn.net/iotisan/ ---- 翻译开始 第10章 Class B 模式的上行帧 Class B 模式的上行帧和 Class 在 Class A 上行帧中这个位没有使用(RFU),而在 Class B 中有使用。 Bit# 7 6 5 4 [3..0] FCtrl bits ADR ADRACKReq ACK Class B FOptsLen 上行帧中的 Class B 位域置为1,用于通知network server 设备已切换到 Class B 模式,准备好接收下行ping包。 下行帧的FPending位域的定义是不变的,仍然和Class A的定义一样,表示server有多个下行帧要下发,设备应当继续接收。 翻译完 ----
最近因为一些原因,大部分软件和网站都变成了灰色,但是有的网站无脑跟风,只想着变色不想着用户的体验,如图 某些网站直接给*添加,搞的特别麻烦 由于我经常刷b站,在首页灰色的一片又导致我的观感非常难受,而且这次 b站变灰直接在html元素加了个类名,明摆着已经提前为以后的变灰做准备,而且让我们方便去除 按下F12查看 去掉这个类,颜色恢复 我们刷新,在控制台中用一段简单的javascript代替手动删除的操作 document.documentElement.removeAttribute('class', ''); 这段代码的大意就是先获取html元素,然后将html元素中的class属性删除 还有一个是最近每次打开b站都看到这个提示 完成之后可以选择使用Chrome收藏夹的标签快速执行,不过不知道因为什么在执行第二条的时候整个页面会变成none四个字符,但是没关系我安装了油猴,写成油猴脚本会方便点 在油猴中创建一个脚本 开启该插件后,每次访问b站都会自动的去除灰色然后关闭广告弹窗
这决定了帧的编码速率。 比特率:输入适合您的上传速度的码率,如上一部分中所述。请记住,一些平台有最大码率(即,Twitch 目前是 6000 Kbps)。 关键帧间隔:设置为 2。 此选项支持编码器动态选择 B 帧的数量,可选范围介于 0 到您指定的 B 帧数量之间。B 帧可提升图像质量,因此十分有用,但它们也会耗用大量可用的比特率,由此降低高速运动场景的质量。 但不建议这样做,因为 NVENC 已经非常高效,而且因为要将帧复制到第二个 GPU,使用第二张卡所能获得的有限的收益会损失。 最大 B 帧:设为 4。 最大 B 帧:设为 4。如果您取消选中“Look-ahead”(预览)选项,请将 B 帧数量从 4 降至 2。 NVIDIA Broadcast 功能包括: 降噪:使用 AI 从麦克风源中去除嘈杂的机械键盘或电流杂音等背景噪声。AI 网络还可以用于处理传入音频源,为开着自由麦的好友过滤噪音。
本文作者twowinter,转载请注明作者:http://blog.csdn.net/iotisan/ ---- 翻译开始 第11章 下行 ping 帧格式(仅 Class B) 11.1 物理帧格式 下行 Ping 使用和 Class A 下行帧相同的帧格式,但必须采用一个不同的信道频率计划。 LoRaWAN Class B 协议中并没有明确规定如何去建立这样的多播组,以及如何安全地分配多播密钥。这必须通过 节点个性化设置 或者 通过应用层 来实现。 同时也采用相同的帧计数,在收到 Class B ping 时隙或者 Class A 应答时隙时都进行递增处理。 11.2.2 多播 MAC 消息格式 多播帧和单播帧大部分都一样,仅有一些区别: 不允许携带 MAC 命令,既不能在 FOpt 字段里,也不能 port 0 时的载荷里携带,因为多播下行不像单播帧那样具备认证鲁棒性
binary_map = cv2.threshold(saliency_map, 0.5 * saliency_map.max(), 255, cv2.THRESH_BINARY) # 使用形态学操作去除噪声 ped['x'] + ped['w'], ped['y'] + ped['h']), (0, 255, 0), 2) return image# 假设 image 是车辆摄像头捕获的当前帧, in obstacles: if is_obstacle(image, obs): cv2.rectangle(image, (obs['x'], obs['y'] ), (obs['x'] + obs['w'], obs['y'] + obs['h']), (0, 255, 255), 2) display_obstacle_warning( at:", obstacle)# 假设 image 是车辆摄像头捕获的当前帧,saliency_map 是对应的显著性映射image_with_obstacles = obstacle_warning
目录 list 去重 list 去重 List<String> string1 = new ArrayList<>(); string1.add("1"); string1.add("2"); string1.add("3"); string1.add("4"); List<String> string2 = new ArrayList<>(); string2.add("2"); str