【无标题】Test
短视频平台的那些事
- 前言
过去几年,我一直专注于短视频平台的建设和开发工作。在这个过程中,我发现这个领域有着非常多的挑战和机遇,也涌现出了许多新的技术和创新。今天大家分享我个人的一些经验,希望能够为大家带来一些启发和帮助。
[图片] - 概览介绍
通常一个短视频平台会有自己的视频输入服务(C端App侧 & Web端创作者平台 & 业务方API推送),视频处理服务(转码,水印,片头片尾…),安全服务(涉黄涉暴等安全检测),推荐分发服务(个人推荐,任意渠道推荐,可以超业务域分发,对接外部),数据分析服务(视频,用户相关播放数据和粉丝数据),结算服务(按数据分析结果进行收益结算)。 由于是视频类服务,其中还必须配置CDN文件加速和图片、视频防盗链系统。除了这些之外,实际中会有很多更深层次的或边缘性赋能的业务细节,但今天在这我将不去深扒,而围绕整体上层的功能特点为大家介绍下短视频业务的建设架构和核心能力。
[图片] - 业务框架
以之前的业务举例,如下图有很多短视频相关的基础能力(视频处理,内容理解,审核,流通,分发,数据存储,数据分析)都统一建设到了我们的视频中台,可以大大的缩减新视频业务的对接时间,提高处理和传播效率。由不同的视频发布入口传入中台,在视频中台这个通用域完成视频剪辑处理和合法性判断,并将最终结果推荐分发到各个的渠道方,完成视频的整体流转,同时中台提供数据查询和分析能力。因此外部的视频发布平台(创作者平台、短视频APP)就可以在高度定制化自己的引流、促活业务的同时快速接入视频中台的处理能力,很好的达到了视频中台能力的“多路复用”的效果。
[图片]
服务分层图:
[图片] - 关键技术能力
4.1 视频处理
4.1.1 FFMPEG技术
多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等,一条命令就可以给视频添加很多效果,以下为一些简单例子(实际一条指令可以有很多复杂的操作,大家有兴趣的话可以自己去操作玩一下,使用的时候也需要注意CPU资源):
转码(修改视频格式,分辨率,码率…)案例:
//转码demo
//-i输入,-r 指定帧率,-s 指定分辨率,-b 指定比特率;于此同时可以对声道进行转码,-acodec 指定音频编码,-ab 指定音频比特率,-ac 指定声道数
ffmpeg -i out.ogv -s 640x480 -b 500k -vcodec h264 -r 29.97 -acodec libfaac -ab 48k -ac 2 out.mp4
截图案例:
//ffmpeg 通过指定 -vcodec 参数为 mjpeg,或者指定 -f 参数为 mjpeg时,可以输出 jpg截图,指定 -vcodec参数为png,或者指定输出文件扩展名为png
ffmpeg -i 1.mp4 sample.png -ss 00:00:05 -vframes 1 -an -vcodec mjpeg
水印案例:
//在视频左下角添加图片水印
ffmpeg -i input.mp4 -i logo.png -filter_complex ‘overlay=x=10:y=main_h-overlay_h-10’ output.mp4
//在视频左上角添加一条白色字体的文字水印
ffmpeg -i input.mp4 -vf “drawtext=fontfile=simhei.ttf: text=‘技术是第一生产力’:x=10:y=10:fontsize=24:fontcolor=white:shadowy=2” output.mp4
4.2 视频安全,合规
4.2.1 视频安全审核
由安全审核算法(类似易盾系统)对视频进行判断分析,任何涉黄涉爆的文字,图片,视频内容都将被检测处理,机器审核和人工审核进行双重干预。
4.2.2 视频MD5校验
对所有流入系统的视频进行简单MD5值计算,排除重复的视频。
4.2.3 视频AI指纹
对于高度相似度的类搬运视频,需要通过AI指纹算法进行相似度判重,将已有的高质量视频的AI指纹入库,任何新进的视频都将和指纹库的视频进行相似度对比(空间向量对比,词频碰撞对比),更多详情可上华为云或阿里云上搜索视频指纹相关服务进行了解。
4.3 视频内容理解
4.3.1 视频分类
视频分类算法是通过对视频进行抽样拆帧分析各帧的属性,例如美妆,风景,人文,建筑,游戏等不同类别,通过算法聚合高频分类得到视频的最终分类。
4.3.2 视频标签
同视频分类类似,视频标签算法都是通过算法取帧分析视频画面得到视频标签,但是视频标签会更加专注于一些关键词、热点词,更加具象化。
4.3.3 视频质量
任何视频都可以通过视频质量算法打出质量分数,从而更好的去定性一个视频,判别依据包含但不限于机器判别的视频分辨率、码率、帧率、黑白屏、乱码、马赛克以及人工判别的视频调性(与视频类目和标签相关度)。
4.4 视频推荐,分发
4.4.1 分发
分发主要指的是向不同视频接受渠道分发视频(结合用户黑白名单,渠道业务倾向),一般会有几种策略:
- 按渠道定制视频分类分发
- 按视频质量分发
- 按视频标签分发
- 全量分发
4.4.2 推荐
推荐主要是通过视频推荐算法是通过对视频进行推送,会结合各种大数据计算出来的用户画像与其对应的消费场进行高度融合,推送的对象可以是个人创作者也可以是业务渠道,在建设推荐算法的过程中会进行大量的AB实验(在播放数据、粉丝数据、收益数据等不同影响面进行对比)用于验证和优化算法。
5. 支撑域
5.1 用户域-创作者平台
5.1.1 等级、权益、资格认证体系
原创认证,实名认证,大V认证等都为关键的资质认证渠道,认证完成的用户在信用分,分发优先级,收益结算等都有优先处理权。
不同等级对应不同权益,定制化成长任务,等级提升会有流量、特权、金额奖励。
[图片]
5.1.2 用户留存,促活体系
开设新手指导和各种各样的活动,这些活动在激励用户进行视频投稿时会区分不同用户群体,依据不同层次的用户画像(头部、腰部、尾部)开启留存,促活,品宣等激励策略。
5.2 数据分析领域
涵盖用户数据(粉丝数据,活跃数据,各类排行榜),播放数据(播放量,点赞量,收藏量,分享量,完播率等),以用户和视频两个不同维度(单篇,多渠道对别)多方面展示数据,让用户可以清晰便捷的查看自己的相关数据的波动情况。
[图片]
5.3 收益结算领域
收益结算环节是每个创作者最关心的,所以必须要保证此步骤的透明、公正、及时(生产,反馈)、无误差以及查看分析的便捷性。
结算逻辑通常会开启定时任务自动化统计并分析流量收益、优质收益、活动收益等,保存进入预估收益明细,自动对生成预估对账单与结算单,C端和web端支持用户按指定结算周期查看、提现、审核、打款。同时必不可少的是结算相关的预警,因为涉及到金钱,结算中的所有环节都要有预警和补偿方案,从而保证结算业务的稳定性。
[图片]
6. 总结
以上就是我总结的一些短视频平台的主要建设要点,相信大家已经有了一些了解,其实总体来说短视频业务非常依赖于高效的算法,利用它们去对输入的视频进行快速过滤、定性、推荐,这样就可以更好提高短视频流通的实时性与准确性。除此之外在创作者端的各种激励策略是最重要的,如何能保持平台的吸引力,打开视频消费市场,怎么才能很好的完成用户的留存、促活,所以实际中还有很多其他的辅助平台需要搭建,例如视频剪辑平台(视频剪辑)、MCN平台(个创+机构)、审核平台(机审,人审)、运营后台等,这些平台更多的是为了短视频的生产、审核、流程化、合规化做业务支持。
相关文章:
【无标题】Test
短视频平台的那些事 前言 过去几年,我一直专注于短视频平台的建设和开发工作。在这个过程中,我发现这个领域有着非常多的挑战和机遇,也涌现出了许多新的技术和创新。今天大家分享我个人的一些经验,希望能够为大家带来一些启发和帮…...
1576. 替换所有的问号
1576. 替换所有的问号 C代码:自己写的 char * modifyString(char * s){int n strlen(s);for (int i 0; i < n; i){if (s[i] ?) {if (i ! 0 && i ! n-1) {for (int j 0; j < 26; j) {if (a j ! s[i-1] && a j ! s[i1]) {s[i] a j;br…...
MySQL学习笔记(快速入门)
Mysql快速入门 一、数据库相关概念1.启动数据库2. 客户端连接3. 数据模型4.关系型数据库RDBMS 二、SQL语言1. 通用语法2. SQL分类 三、DDL数据定义语言1. 数据库操作2. 表操作(1) 查询当前数据库所有表show tables;(2) 查询表的结…...
使用DNS查询Web服务器IP地址
浏览器并不具备访问网络的功能,其最终是通过操作系统实现的,委托操作系统访问服务器时提供的并不是浏览器里面输入的域名而是ip地址,因此第一步需要将域名转换为对应的ip地址 域名:www.baidu.com ip地址是一串数字 tcp/ip的网络结…...
docker虚拟网桥和业务网段冲突处理
ifconfig查看docker虚拟网桥ip地址 docker inspect --format{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} $(docker ps -aq)查询所有容器的ip 修改docker-compose networks networks xxx-network: driver: bridge ipam: c…...
axios登录,登出接口的简单封装步骤详解!
目录 总结一、步骤1.安装Axios:2.axios对象封装3.请求api封装4.使用pinia临时库保存响应信息(按需求用)5.最后,在组件中使用! 总结 封装axios对象,编写公共请求代码、添加拦截逻辑、然后分层实现axios请求…...
九大装修收纳空间的设计,收藏备用!福州中宅装饰,福州装修
如果房子面积不大,收纳设计就显得非常重要。其实装修房子中很多地方都可以做收纳,九大空间每一处都可以放下你的东西,让你摆脱收纳烦恼。 收纳空间少的话,装修完后住久了怕会乱成一窝,因此装修的时候,收纳…...
软件工程概论
文章目录 软件的定义软件的特点软件的种类软件工程的起源软件工程的三个阶段软件工程概念的提出软件开发的本质软件工程框架软件工程的目标软件工程的原则软件工程的活动 软件的定义 计算机系统中的程序及其文档。 程序是计算任务的处理对象和处理规则的描述; 文档…...
仅个人记录:复现dotspatialdemo、打包、
复现dotspatialdemo 原始文件 一、新建项目、工具箱设置,项目引用等看上一篇 二、根据Form1.Designer.cs设计界面Form1.cs[设计] SplitContainer控件:将容器的显示区域分成两个大小可调的、可以向其中添加控件的面板。 legend控件:图例 map控…...
华为云云耀云服务器L实例评测|Elasticsearch的springboot整合 Kibana进行全查询和模糊查询
前言 最近华为云云耀云服务器L实例上新,也搞了一台来玩,期间遇到各种问题,在解决问题的过程中学到不少和运维相关的知识。 在前几期的博客中,介绍了Elasticsearch的Docker版本的安装,Elasticsearch的可视化Kibana工具…...
C++统一初始化和初始化列表
一直对C初始化使用圆括号和花括号的区别有所疑惑,参考书籍和博客简单总结一下 文章目录 常见的初始化操作统一初始化(Uniform Initialization)初始化列表(Initializer Lists) 常见的初始化操作 对于一个基础数据类型进行初始化,比如 int: i…...
【重拾C语言】六、批量数据组织(一)数组(数组类型、声明与操作、多维数组;典例:杨辉三角、矩阵乘积、消去法)
目录 前言 六、批量数据组织——数组 6.1 成绩统计——数组类型 6.1.1 数组类型 6.1.2 数组声明与操作 6.1.3 成绩统计 6.2 统计多科成绩——多维数组 6.3 程序设计实例 6.3.1 杨辉三角形 6.3.2 矩阵乘积 6.3.3 消去法 6.4 线性表——分类与检索 前言 ChatGPT C语…...
C++算法:寻找两个正序数组的中位数
题目 寻找两个正序数组的中位数 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 示例 1: 输入:nums1 [1,3], nums2 [2] 输…...
2.1 关系数据结构及形式化定义
思维导图: 2.1.1 关系 笔记: 关系数据库模型是一个简单但强大的方式来表示数据及其之间的关系。下面是这节的关键内容: - **关系模型核心概念** * 关系数据模型的核心是“关系”,它在逻辑上表现为一个二维表。 * 此表中&a…...
“揭秘淘宝店铺所有商品接口:一键获取海量热销宝贝信息!“
淘宝店铺所有商品接口可以通过shop id或店铺主链接获取到整店商品,数据包括:商品ID,图片地址,店铺标题,优惠价,价格,销量,宝贝链接等整个店铺的商品。 要使用这个接口,需…...
跟着播客学英语-Why I use vim ? part two
在上一期作者讲到了他使用 Vim 的主要原因是提高效率,不需要再去使用鼠标,今天我们继续上次未听完的内容: if you type Vi, thats going to be alias to Vim anyway by default theres, not really a good reason for you to use vi that I c…...
【网络通信三要素】TCP与UDP快速入门
网络通信三要素 1.什么是网络编程? 可以让设备中的程序,与网络上其他设备中的程序进行数据交互,从而实现网络通信的手段,java.net.*包下提供了网络编程的解决方案 2.基本的通信架构 基本的通信架构有2种形式:CS架构…...
k8s集群的简单搭建
K8S简单集群搭建 前提条件 windos11电脑,内存16g以上安装vmware虚拟机软件安装三个centos7虚拟机,分配硬盘40g,内存4g,CPU4核心网络均采用NAT模式(新建虚拟机默认的模式) centos7镜像下载:https://mirrors.tuna.tsi…...
语义分割笔记(三):通过opencv对mask图片来画分割对象的外接椭圆
文章目录 mask图像介绍步骤代码 mask图像介绍 根据 mask 图像来画分割对象的外接椭圆是一种常见的图像分割任务。Mask 图像通常是一个二值图像,其中包含了感兴趣对象的像素。通常情况下,白色像素表示对象,黑色像素表示背景。 步骤 以下是一…...
Nosql redis高可用和持久化
Nosql redis高可用和持久化 1、redis高可用2、redis持久化2.1redis持久化2.2Redis 持久化方法2.3RDB 持久化2.3.1RDB持久化工作原理2.3.2触发条件2.3.3其他自动触发机制2.3.4执行流程2.3.5启动时加载 2.4AOF 持久化2.4.1AOF持久化原理2.4.2开启AOF2.4.3执行流程2.4.4文件重写的…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...
Ubuntu系统多网卡多相机IP设置方法
目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机,交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息,系统版本:Ubuntu22.04.5 LTS;内核版本…...
数据结构:递归的种类(Types of Recursion)
目录 尾递归(Tail Recursion) 什么是 Loop(循环)? 复杂度分析 头递归(Head Recursion) 树形递归(Tree Recursion) 线性递归(Linear Recursion)…...
WebRTC调研
WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...
【阅读笔记】MemOS: 大语言模型内存增强生成操作系统
核心速览 研究背景 研究问题:这篇文章要解决的问题是当前大型语言模型(LLMs)在处理内存方面的局限性。LLMs虽然在语言感知和生成方面表现出色,但缺乏统一的、结构化的内存架构。现有的方法如检索增强生成(RA…...
【R语言编程——数据调用】
这里写自定义目录标题 可用库及数据集外部数据导入方法查看数据集信息 在R语言中,有多个库支持调用内置数据集或外部数据,包括studentdata等教学或示例数据集。以下是常见的库和方法: 可用库及数据集 openintro库 该库包含多个教学数据集&a…...
