RTMP播放器全解析
一、RTMP 播放器概述
(一)RTMP 播放器的定义与作用
RTMP 播放器是一种专门用于播放采用 RTMP(Real Time Messaging Protocol)协议的视频流的工具。在当今的流媒体播放领域中,它扮演着至关重要的角色。RTMP 播放器能够实时接收、解码和播放来自服务器的音频、视频数据,为用户提供流畅的观看体验。
在直播场景中,RTMP 播放器能够实现低延迟播放,让观众与主持人之间的互动更加及时。例如,在会议类直播中,参会者可以通过文字聊天与主讲人互动,而 RTMP 播放器的低延迟特性能够确保观众的评论和主讲人的回应之间的时间差尽可能小。在视频会议中,RTMP 播放器可以保证参会人员之间的交流顺畅,减少因延迟带来的沟通障碍。对于监控领域,RTMP 播放器能够实时显示监控画面,帮助相关人员及时发现问题并采取措施。
二、常见 RTMP 播放器推荐
(一)FFMPEG
FFMPEG 是一套开源计算机程序,采用 LGPL 或 GPL 许可证。它包含非常先进的音频 / 视频编解码库 libavcodec,为保证高可移植性和编解码质量,很多 codec 都是从头开发的。支持的格式众多,如 ASF、AVI、BFI、IFF 等。在点播播放中,文件格式支持很全面,但维护成本很高。
(二)大牛直播 SDK
”大牛直播SDK”,始于2015年,致力于传统行业极致体验的音视频直播技术解决方案,产品涵盖跨平台的实时RTMP推流、RTMP/RTSP直播播放(支持RTSP|RTMP H.265,Enhanced RTMP H.265)、GB28181设备接入、推送端播放端实时录像、多路流媒体转发(RTSP转RTMP,RTMP转RTMP,RTSP|RTMP转GB28181)、音视频导播、动态视频合成、音频混音、一对一互动直播、内置轻量级RTSP服务、RTSP网关服务等,比快更快,业界真正稳定可靠的超低延迟直播SDK(毫秒级延迟,低延迟模式下150~300ms)。
(三)Vitamio
Vitamio 是一款 Android 与 iOS 平台上的全能多媒体开发框架,全面支持硬件解码与 GPU 渲染。能够流畅播放 720P 甚至 1080P 高清视频,跨平台支持 MMS、RTSP、RTMP、HLS 等多种视频流媒体协议。但貌似已不维护了。
(四)Potplayer 和 VLC
在 Windows 平台上,Potplayer 和 VLC 都是比较常见的播放器。Potplayer 功能强大,支持多种格式播放,但对部分 h265 编码的流媒体直播源支持不友好,可能只有声音而看不到画面。VLC 是自由、开源的跨平台多媒体播放器及框架,可播放大多数多媒体文件及各种流媒体协议,但功能相对单一,同样对部分 h265 编码直播源支持不佳。
三、RTMP 播放器的特点
(一)低延迟优势
RTMP 在低延时应用场景中具有重要地位。在互动式直播中,观众与主讲人的互动需要及时响应,RTMP 的低延迟特性(一般在3-5秒,像大牛直播SDK全自研内核框架的延迟可以做到150-300ms)使得这种互动更加流畅自然。相比之下,HTTP 流的延时一般在 10 秒以上,明显不适合互动式直播的需求。在视频会议中, RTMP 的低延迟仍能保证参会人员之间的交流更加顺畅,减少因延迟带来的沟通障碍。
(二)功能特性
以大牛直播SDK的RTMP播放器模块设计为例,功能设计如下:
如不单独说明,系Windows、Linux(含x86_64|aarch64)、Android、iOS全平台支持。
- [多实例播放]支持多实例播放;
- [事件回调]支持网络状态、buffer状态等回调;
- [视频格式]支持RTMP扩展H.265和Enhanced RTMP H.265,H.264;
- [音频格式]支持AAC/PCMA/PCMU/Speex;
- [H.264/H.265软解码]支持H.264/H.265软解;
- [H.264硬解码]Windows/Android/iOS支持特定机型H.264硬解;
- [H.265硬解]Windows/Android/iOS支持特定机型H.265硬解;
- [H.264/H.265硬解码]Android支持设置Surface模式硬解和普通模式硬解码;
- [缓冲时间设置]支持buffer time设置;
- [首屏秒开]支持首屏秒开模式;
- [低延迟模式]支持低延迟模式设置(公网200~400ms);
- [复杂网络处理]支持断网重连等各种网络环境自动适配;
- [快速切换URL]支持播放过程中,快速切换其他URL,内容切换更快;
- [音视频多种render机制]Android平台,视频:SurfaceView/GLSurfaceView,音频:AudioTrack/OpenSL ES;
- [实时静音]支持播放过程中,实时静音/取消静音;
- [实时音量调节]支持播放过程中实时调节音量;
- [实时快照]支持播放过程中截取当前播放画面;
- [只播关键帧]Windows平台支持实时设置是否只播放关键帧;
- [渲染角度]支持0°,90°,180°和270°四个视频画面渲染角度设置;
- [渲染镜像]支持水平反转、垂直反转模式设置;
- [等比例缩放]支持图像等比例缩放绘制(Android设置surface模式硬解模式不支持);
- [实时下载速度更新]支持当前下载速度实时回调(支持设置回调时间间隔);
- [ARGB叠加]Windows平台支持ARGB图像叠加到显示视频(参看C++的DEMO);
- [解码前视频数据回调]支持H.264/H.265数据回调;
- [解码后视频数据回调]支持解码后YUV/RGB数据回调;
- [解码后视频数据缩放回调]Windows平台支持指定回调图像大小的接口(可以对原视图像缩放后再回调到上层);
- [解码前音频数据回调]支持AAC/PCMA/PCMU/SPEEX数据回调;
- [音视频自适应]支持播放过程中,音视频信息改变后自适应;
- [扩展录像功能]完美支持和录像SDK组合使用。
(三)GOP-Cache 和累积延迟
GOP(Group of Pictures)即视频流中两个 I 帧的时间距离。Flash(解码器)只有拿到 GOP 才能开始解码播放。服务器一般先给一个 I 帧给 Flash。假设 GOP 是 10 秒,即每隔 10 秒才有关键帧,如果用户在第 5 秒时开始播放,会有两种方案。第一种方案是等待下一个 I 帧,再等 5 秒才开始给客户端数据,这样延迟低,但会黑屏等待。第二种方案是马上播放前一个 I 帧,这样可以快速启动,但延迟会增大。
累积延迟是 RTMP 的一个问题。因为 RTMP 基于 TCP 不会丢包,当网络状态差时,服务器会将包缓存起来,导致累积的延迟。处理累积延迟的方法有多种。例如,客户端检测到缓冲区有很多数据时,可以重连服务器。此外,还可以通过调整服务器的直播队列长度、编码器调低 GOP 等方法来降低延迟。例如,编码器调低 GOP 到 0.5 秒一个 GOP,这样延迟也很低,也不用等待,但编码器压缩率会降低,图像质量没有那么好。
四、如何使用 RTMP 播放器
以大牛直播SDK的Windows端RTMP播放器集成为例,上图是大牛直播SDK的Android端启动RTSP服务和推送RTMP流,然后Windows端分别播放RTSP和RTMP流的延迟情况(右侧是RTMP流)。

- demo 说明:
- 提供 C++/C# 两套接口,对外提供 32/64 位 debug/release 库,C++ 和 C# 接口一一对应,C# 接口比 C++ 接口增加前缀 NT_PB_。
- 播放端 SDK 支持 Win7 及以上系统,本 demo 基于 VS2013 开发。
- 展示了界面 UI,包括链接状态、下载速度、缓冲状态等信息。
- 集成说明:
- C++ 头文件和 C# 头文件的相关定义。
- 集成步骤包括拷贝库文件、设置授权、添加头文件等。
- 正式授权版需要在 Init () 接口调用之前添加设置 license 的代码。
- 接口调用时序(以 C# 为例):
- 设置授权 license。
- 设置日志存放路径。
- 初始化 SDK。
- 特定机型硬解码检测,可检测系统是否支持硬解,如需使用硬解码可调用相关接口。
- Open 生成播放实例,每调用一次 Open 接口对应一个播放实例。
- 设置回调事件,包括网络链接状态、buffer 状态、实时带宽等回调,以及视频分辨率回调、YUV/RGB32 数据回调等。
- D3DRender 检测,检测系统是否支持 D3D 绘制,对于不支持的情况可设置回调 YUV 数据,用 GDI 模式绘制,但 GDI 绘制效率偏低。
- 设置播放 URL,支持 rtsp/rtmp/ 本地 FLV 文件。
- 设置回调 PCM。
- RTMP/RTSP 播放参数设置,包括设置缓冲大小、RTSP TCP 模式、超时时间、自动切换 TCP/UDP、秒开、低延时模式、下载速度上报等。
- 开始播放 RTMP 或 RTSP 流数据。
- RTMP/RTSP 拉流端录像,包括设置录像目录、单个文件最大大小、文件名生成规则、录像回调接口、音频转 AAC 编码开关、是否录视频和音频等,并可启动和停止录像。
- 实时快照,用于播放端实时截取当前播放图片,图片以 PNG 形式保存至本地。
- 快速切换 URL,用于实时切换播放的 URL。
- 用户数据回调和 SEI 数据回调,如不需要处理相关数据,此接口无需调用。
- 停止播放和关闭播放实例。
- Uninit,是 SDK 最后一个调用的接口,多实例环境下只需要调用一次。
相关文章:
RTMP播放器全解析
一、RTMP 播放器概述 (一)RTMP 播放器的定义与作用 RTMP 播放器是一种专门用于播放采用 RTMP(Real Time Messaging Protocol)协议的视频流的工具。在当今的流媒体播放领域中,它扮演着至关重要的角色。RTMP 播放器能够…...
定期清洗ip是为了什么?怎么清洗iip
定期清洗IP(也称为“IP清理”)的目的是确保使用的IP池保持高效、可靠、安全,避免因使用无效或被封禁的IP导致网络操作失败。尤其在数据爬取、负载均衡等使用代理的场景中,定期清洗IP有助于提升整体的性能和数据抓取成功率。 定期…...
谁能给我一个ai现在无法替代画师的理由?
小白可做!全自动AI影视解说一键成片剪辑工具https://docs.qq.com/doc/DYnl6d0FLdHp0V2ll 如何看待现如今的AI绘画 哎呀玫瑰花来了,所有花式都要玩完了。 我相信大家在网上已经看过了太多惊为天人的AI绘画作品,有人抵制,有人支持&a…...
深入理解MySQL InnoDB中的B+索引机制
目录 一、InnoDB中的B 树索引介绍 二、聚簇索引 (一)使用记录主键值的大小进行排序 页内记录排序 页之间的排序 目录项页的排序 (二)叶子节点存储完整的用户记录 数据即索引 自动创建 (三)聚簇索引…...
语言的输入
编程语言提供最基本的输入输出,输入一个预期的数据也不是看起来那么简单,如下一一展开。 不同输入形式 C语言scanf提供格式串输入,程序员负责配置正确的格式,比如%d整型,%s为字符串。可能出现格式串和变量格式、个数不…...
2024年中国电子学会青少年软件编程(Python)等级考试(二级)核心考点速查卡
考前练习 2024年03月中国电子学会青少年软件编程(Python)等级考试试卷(二级)答案 解析 2024年06月中国电子学会青少年软件编程(Python)等级考试试卷(二级)答案 解析 知识点描述 …...
OpenCV系列教程二:基本图像增强(数值运算)、滤波器(去噪、边缘检测)
文章目录 一、基本图像增强(数值运算)1.1 加法 (cv2.add)1.1.1 图像与标量相加(调节亮度)1.1.2 图像与图像相加(两个图像shape要相同)1.1.3 图像的加权加法(渐变切换&…...
什么是文件完整性监控(FIM)
组织经常使用基于文件的系统来组织、存储和管理信息。文件完整性监控(FIM)是一种用于监控和验证文件和系统完整性的技术,识别用户并提醒用户对文件、文件夹和配置进行未经授权或意外的变更是 FIM 的主要目标,有助于保护关键数据和…...
分库分表还是分布式?如何用 OceanBase的单机分布式一体化从根本上解决问题
随着企业业务规模的不断增长,单机集中式的数据库系统逐渐难以承载企业日益增长的数据存储与处理需求。因此,MySQL 的分库分表方案成为了众多企业应对数据存储量激增及数据处理能力需求扩张的“止痛药”。尽管这一方案短期内有效缓解了企业面临的大规模数…...
怎么查看网站是否被谷歌收录,哪些因素影响着网站是否被谷歌收录
一、怎么查看网站是否被谷歌收录 查看网站是否被谷歌收录,有多种方法可供选择,以下是几种常用的方式: 1.使用“site:”指令: 在谷歌搜索引擎的搜索框中输入“site:你的域名网址”(注意使用英文冒号&#x…...
【RabbitMQ】面试题
在本篇文章中,主要是介绍RabbitMQ一些常见的面试题。对于前几篇文章的代码,都已经在码云中给出,链接是mq-test: 学习RabbitMQ的一些简单案例 (gitee.com),如果存在问题的话欢迎各位提出,望共同进步。 MQ的作用以及应用…...
Python软体中使用TensorFlow实现一个简单的神经网络:从零开始
使用TensorFlow实现一个简单的神经网络:从零开始 在现代数据科学和机器学习领域,神经网络是一个强大的工具。TensorFlow是一个广泛使用的开源库,专门用于机器学习和深度学习。本文将详细介绍如何使用TensorFlow实现一个简单的神经网络。我们将从基础概念开始,逐步深入到代…...
StopWath,apache commons lang3 包下的一个任务执行时间监视器的使用
StopWath是 apache commons lang3 包下的一个任务执行时间监视器,与我们平时常用的秒表的行为比较类似,我们先看一下其中的一些重要方法: <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --> <dependen…...
ELMO理论
目录 1 优点 2 缺点 3.知识点个人笔记 2018年3月份,ELMo出世,该paper是NAACL18 Best Paper。在之前2013年的word2vec及2014年的GloVe的工作中,每个词对应一个vector,对于多义词无能为力。ELMo的工作对于此,提出了一…...
EMU 街机模拟器编译方法
安装ubuntu 16.04 下载gcc 8.2 安装 然后安装automake 1.16 ,1.15 安装jdk8 sdk 里面配套的ndk 21e 编译库 cd ~/emu-ex-plus-alpha/imagine/bundle/all/ export IMAGINE_PATH/home/lxm/emu-ex-plus-alpha/imagine export ANDROID_SDK_ROOT/home/lxm/Sdk export ANDROID_NDK_…...
c++开发之编译curl(windows版本)
在 Windows 上编译支持 OpenSSL 的 cURL 库并不简单,因为涉及到多个库的依赖关系以及工具链的配置。以下是编译支持 OpenSSL 的 cURL 库的详尽步骤: 环境要求 编译工具链: MinGW 或 Visual StudioCMakePerl (用于编译 OpenSSL)NASM (用于编译…...
IT运维挑战与对策:构建高效一体化运维管理体系
在当今数字化时代,IT运维作为企业运营的核心支撑,其重要性不言而喻。然而,随着业务规模的扩大和技术的不断革新,IT运维团队面临着前所未有的挑战。本文旨在深度剖析当前IT运维中存在的主要问题,并探索一体化解决方案&a…...
前海石公园的停车点探寻
前海石公园是真的很美,很多看海人,很多钓鱼佬,很多抓螃蟹的人,很多挖沙子的人,很多拍照的人,尤其是没有大太阳的时间段或每天傍晚或每个放假的时候人气超高,故前海石公园停车真的很紧张。由于前…...
嵌入式学习--线性表Day01
嵌入式学习--线性表Day01 顺序表 1.1数组的插入、删除操作 1.2修改为last版本 1.3顺序表相关操作 顺序表、单向链表、单向循环链表、双向链表、双向循环链表、顺序栈、链式栈、循环队列(顺序队列)、链式队列 1)逻辑结构:线性结构 …...
Rust 全局变量的最佳实践 lazy_static/OnceLock/Mutex/RwLock
在实际项目开发中,难免需要用到全局变量,比如全局配置信息,全局内存池等,此类数据结构可能在多处需要被使用,保存为全局变量可以很方便的进行修改与读取。 在Rust中,如果只是读取静态变量是比较简单的&…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
