OTT 的快速频道切换(FCC)

news2024/9/24 7:16:05

     FCC(Fast Channel Change)快速频道切换是一种由FCC服务器下发特制的以I帧为起始的单播节目流来提升频道切换时间的方法, 通过在网络中部署FCC服务,可以回避等待I帧时间与IGMP交互时间,提升I帧传输时间,从而提高频道切换速度。

     整个互联网电视频道切换时间可概括为以下几个组成部分:

  1. 红外等待时间:遥控器发出红外信号到STB发出IGMP LEAVE之间的时间。
  2. IGMP过程:发出IGMP LEAVE到收到第一个组播UDP包的时间。取决于组播频道离开、加入时延,以及机顶盒在离开、加入操作间等待的时间。
  3. 等待I帧时间:从第一个组播包到第一个包含I帧的组播包。
  4. I帧传输时间:第一个完整的I帧传输完成的时间。
  5. 解码时间:包括Buffer缓存时间以及解码出第一帧图像的时间

基于FCC的频道切换过程可大致分为三个阶段:

1.FCC服务端加入到每个频道的组播组中,缓存从头端通过组播方式发送下来的每个频道的视频信息。

2.当STB发起频道切换时,首先向FCC服务端发送请求信息,FCC服务端将缓存的最新的频道信息以单播方式1.3倍快速推送给STB。快推的单播流直接以I帧为起始,不需要机顶盒等待I帧。

3.STB加入到新频道的组播组中,FCC服务端停止单播推送

 sh加入频道流程:

  1. 用户通过遥控器发起频道切换红外请求后,STB发送IGMP LEAVE消息;
  2. STB向FCC Server以RTCP消息的形式发起FCC请求消息;
  3. FCC Server向STB回FCC请求响应消息;
  4. FCC Server从Cache中的某个I帧开始向STB以快发速率发单播流;
  5. FCC Server判断组播和单播已经同步,发送同步通知消息,通知STB加入组播;
  6. STB加入组播,当收到第一个组播包时,通知FCC Server已经收到组播流,发送结束消息,并告知第一个组播包序号;
  7. FCC Server继续发单播流,直到到达STB收到的第一个组播包序号

 离开频道流程

  1. 在接收完最后一个单播UDP包(即已经完全过度到组播)之后离开频道。此时,按普通非FCC的频道切换流程,直接向接入设备发IGMP LEAVE,离开组播即可。
  2. 已经发出IGMP JOIN且单播尚未结束之时,离开频道。此时,机顶盒须向FCC服务端发结束消息结束单播,并向接入设备发IGMP LEAVE离开组播。
  3. 在收到同步消息之前,离开频道。此时,机顶盒须向FCC服务端发结束消息结束单播

FCC服务端有两种不同的发流方式

  1. 开始时以1.3倍速率快发单播流,与组播同步后变为线速转发(1倍)所收到的组播流;这种方式下,单播流与组播流共存时间段内存在短时间内超过用户物理带宽。共存时间长短与组播加入时延有关,如果共存时间过长会造成丢包。
  2. 开始时以1.3倍速率快发单播流,与组播同步后降速为0.N倍速率发组播流;这种方式下,不会超出物理带宽,FCC单播流服务时间较长。另外,如果组播加入时延较长,会造成单播流与组播流无法平滑衔接过渡。

消息格式定义

业务交互过程中涉及的RTCP消息格式依照RFC 4585定义,具体如下:

    0                   1                   2                   3

    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |V=2|P|   FMT   |       PT      |          length               |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |                  SSRC of packet sender                        |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |                  SSRC of media source                         |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   :            Feedback Control Information (FCI)                 :

   :                                                               :

其中,各个字段的意义和规范要求如下:

  1. V=2(2bits,RTP版本)
  2. P=0(1bit,padding)
  3. FMT(5bits,Feedback message type反馈消息类型)=2、3、4、5

0:    unassigned

1:    Generic NACK

2-30:  unassigned

31:   reserved

  1. PT=205(8bits,Payload type 负载类型,205:传输层反馈消息)
  2. Length(16bits 长度)
  3. SSRC of packet sender(32bits发包者的SSRC)填0
  4. SSRC of media source(32bits媒体源的SSRC)填请求频道的组播IP地址

FCI:不定长,根据不同的消息具体定义

FCC请求消息

方向:STB—〉FCC服务端

FMT=2

FCI定义:

 0                   1                   2                   3

 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1

 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

 |   Version    |                  Reserved                       |

 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

 |       FCC Client Port        |      Multicast Port             |

 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

 |                  Multicast  Address                            |  

 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

 |                                                                |

 |                            STBID                               |

 |                                                                |

 |                                                                |

 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  1. Version:8bits,版本号,初始版本全0;
  2. Reserved:24bits,保留字段;
  3. Multicast Address:32bits,目标频道的组播地址;
  4. MulticastPort:16bits,目标频道的组播端口;
  5. FCC Client Port:16bits,接受FCC单播流的客户端UDP端口号; 不填则服务端默认接收流的端口为本RTCP消息使用的端口号-1;

STB ID:128bits,32位16进制数的机顶盒ID。(统计管理用途)

FCC请求响应消息

方向: FCC服务端—〉STB

FMT=3

FCI定义:

 0                   1                   2                   3

 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1

 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

 |  Result      |     Type      |       FCC Signal Port           |   

 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

 |        FCC Media Port        |           Reserved              |

 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

 |                       FCC IP Address                           |

 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

 |                      Valid Time                                | 

 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

 |                         Speed                                  | 

 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

 |            Speed After Synchronization (SAS)                   | 

 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  1. R esult:8bits,表示FCC请求处理的结果:0成功,其他服务端因各种原因无法正常处理该请求导致失败。
  2. Type: 8bits,当Result取值为0时,Type表示成功类型。
    1. 当此字段取值为1时,表明服务端要求机顶盒立即加入组播,走普通切换;
    2. 当此字段取值为2时,表明机顶盒要等待FCC Server通知它加入组播(通过下文中的同步通知消息),走正常FCC切换;
    3. 当此字段取值为3时,表示重定向:STB需要根据消息中携带的新的FCC Server地址,再次发送FCC请求消息。(新的FCC Server的地址填写在响应中的FCC IP Address字段、FCC Signal Port字段);

当Result取值非0时,Type表示失败类型;如字段取值为1表示频道不存在;

  1. Speed:32bits,表示初始的发流速率,单位bps;
  2. Speed After Synchronization(SAS):32bits,表示同步后的发流速率,单位bps;
  3. FCC IP Address:32bits,发送FCC单播流的IP地址;Result取值为0且Reason-type取值为3时,表示新的FCC服务器的信令IP地址;
  4. FCC Signal Port:16bits,Result取值为0且Reason-type取值为2时,表示本次会话后续信令消息的服务端RTCP接收端口号,不填表示与请求消息的接收端口相同;Result取值为0且Reason-type取值为3时,表示新的FCC服务器的RTCP信令接收端口号;
  5. FCC Media Port:16bits,Result取值为0且Reason-type取值为2时,表示发送FCC单播流的服务端UDP端口号;
  6. Valid Time:仅当Reason-type取值为3时有效;FCC Server有效时长,相对时间,单位为秒,表示在该时间段内FCC Server可用,过期后需要重新请求重定向。填0表示不会过期;

FCC同步通知消息

方向: FCC服务端—〉STB

FMT=4

FCI定义:FCI为空

FCC结束消息

方向:STB—〉FCC服务端

FMT=5

FCI定义:

 0                   1                   2                   3

 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1

 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

 |    Stop      |  Reserved   |            FMPS                 |

 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  1. Stop:8bit,终止服务标志;0:正常;1:终止服务;
  2. Reserved:8 bits,保留位,可填全0;
  3. First Multicast Packet Sequence(FMPS):16bits,收到的第一个组播包的RTP序号;当Stop为1时,此字段无意义。 

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

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

相关文章

chatgpt赋能python:Python构造和析构:介绍和实例

Python 构造和析构:介绍和实例 当你编写 Python 程序时,你可能会注意到一个名为构造函数和析构函数的概念。这些函数可以在创建和删除一个对象时自动执行一些操作。本文将深入介绍 Python 中的构造和析构概念。 构造函数 Python 使用一种名为 __init_…

pkg打包nestjs项目问题点整理

打包运行过程中的警告 Warning Cannot include directory %1 into executable. The directory must be distributed with executable as %2. %1: node_modules\puppeteer.local-chromium %2: path-to-executable/puppeteer 解决方法: 警告大义为在路径如%1的某个目…

chatgpt赋能python:用Python进行nan值的查询

用 Python 进行 nan 值的查询 在数据分析和机器学习的过程中,我们经常会遇到 NaN 值,NaN 是代表不是数字的特殊值,通常意味着在数据中有缺失或者不可识别的数据。由于机器学习等技术需要处理的数据来源繁杂,有时候我们在数据处理…

第八章 总结【编译原理】

第八章 总结【编译原理】 前言推荐第八章 总结8.1 符号表的组织与作用8.1.1符号表的作用8.1.2符号表的组织方式 8.2 整理与查找8.2.1线性表8.2.2 对折查找与二叉树8.2.3杂凑技术 8.3 名字的作用范围8.3.1FORIRAN的符号表组织8.3.2Pascal的符号表组织 8.4 符号表的内容 最后 前言…

python基础学习4【Matplotlib、散点图、折线图绘制、读取存储不同数据源的数据(csv、txt、excel)、编码】

Matplotlib数据可视化基础(绘图基础语法和常用参数) 创建画布与子图 plt.figure()、plt.title()、plt.savefig()保存绘制的图、plt.show() 展示: plt.legend():创建图例 figure.add_subplot():向figure添加一个Axes作为一subp…

极致呈现系列之:Echarts仪表盘的光影奇迹

目录 仪表盘介绍仪表盘的基本结构Echarts仪表盘的常用数据配置项Echarts仪表盘的常用样式配置项创建基本的仪表盘自定义仪表盘样式应用场景 仪表盘介绍 仪表盘通常模拟了传统汽车仪表盘的样式,包括刻度、指针、表盘等元素,用于显示单一指标或数据。它能…

【JavaWeb】前端之HTML基础认知

目录 1、第一个HTML程序 1.1、创建第一个HTML文件 1.2、HTML文件的基本结构 2、HTML常见标签 2.1、注释标签 2.2、标题标签:h1-h6 2.3、段落标签:p 2.4、换行标签:br 2.5、格式化标签 2.6、图片标签:img 2.7、超链接标签&…

vue源码理解之模板编译和组件化

一:模板编译 1、模板编译的主要目标是将模板(template)转换为渲染函数(render) template > render() 2、模板编译必要性 Vue 2.0需要用到VNode描述视图以及各种交互,手写显然不切实际,因此用户只需编写类似HTML代码的Vue模板,…

扩展卡尔曼滤波在目标跟踪中的应用(2)

上一节的内容中,我们对于扩展卡尔曼EKF算法进行了讲解,今天我们对上一节的内容进行仿真。 话不多说,开整!!! 仿真背景 我们以一个目标的位置信息为例,其状态方程如下所示: X k 0…

黑马程序员前端 Vue3 小兔鲜电商项目——(二)初始化项目

文章目录 了解 Vue3初始化项目创建项目启动项目添加目录Git 管理项目jsconfig.json 配置别名路径 ElementPlus 引入安装配置按需导入测试组件 定制 elementPlus 主题安装sass准备定制化的样式文件自动导入配置 Axios 安装并简单封装安装 Axios基础配置封装请求函数并测试 路由整…

数据血缘分析

引入 做过大数据或者接触过数仓的同学,相信都有听到过数据治理、血缘分析的专业术语。不知道大家有没有思考过以下几个问题: 1、什么是血缘分析?主要分析什么东西? 2、为什么要做血缘分析,主要是为了解决什么痛点?做出来之后有什么价值?如何衡量这些价值? 3、如何做血…

mysql存储过程与函数

文章目录 存储过程概述:创建存储过程调用存储过程存储函数的使用对比存储函数和存储过程存储过程和函数的查看、修改、删除查看修改删除 存储过程概述: 它的思想很简单,就是一组经过 预先编译 的 SQL 语句 的封装。 执行过程:存储过程预先存储在 MySQL …

相对路径与绝对路径(以javaweb项目的html文件为例)

相对路径和绝对路径是用于在文件系统中定位文件或目录的两种方式。 1、两者的概念 绝对路径:是指文件或目录在文件系统中的完整路径,从文件系统的根目录开始一直到文件的具体位置。绝对路径所包含的所有目录都是从根目录开始的,因此&#x…

vue源码理解之Vue批量异步更新和虚拟DOM和Diff算法

一:异步更新队列 1、Vue高效的秘诀是一套批量、异步的更新策略 概念: 事件循环 事件循环:浏览器为了协调事件处理、脚本执行、网络请求和渲染等任务而制定的一套工作机制。 宏任务 代表一个个离散的、独立工作单元。浏览器完成一个宏任务&…

【Visual Studio】Qt 的实时绘图曲线功能,使用 C++ 语言,配合 Qt 开发串口通信界面

知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 战斗背景:做了个串口接收界面,用来接收传输过来的信号。但是光用数字显示太单调,需要用图线显示出来。 战略目标&#x…

Java 从入门到精通(续集6)——集合框架

Java 从入门到精通(续集6)——集合框架 在 Java 中,集合是一种用于存储对象的容器,可以方便地进行增删改查等操作。Java 提供了一套完整的集合框架,并且在 Java 5 中引入了泛型,使得集合变得更加灵活。 一、…

Redis哨兵部署

Redis哨兵 单机安装部署 yum install epel-release -yYum install redis -yMkdir /root/redisCd /root/rediscp /etc/redis.conf .cp redis.conf redis_6379.confcp redis.conf redis_6380.confcp redis.conf redis_6381.conf vim redis_6379.conf 1.配置redis.conf文件中的…

极致呈现系列之:Echarts水球图的灵动魅力

目录 水球图简介什么是水球图水球图的特点和用途水球图的安装和引入水球图的常用配置项创建基本的水球图自定义水球图样式水球图中的shape属性使用SVG代码自定义水球图水球图简介 什么是水球图 水球图是一种通过一个圆形的容器来展示数据的图表类型。它以水球作为图形的基本元…

【C++篇】封装类和对象

友情链接:C/C系列系统学习目录 知识总结顺序参考C Primer Plus(第六版)和谭浩强老师的C程序设计(第五版)等,内容以书中为标准,同时参考其它各类书籍以及优质文章,以至减少知识点上的…

【机器学习】十大算法之一 “逻辑回归”

作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…