首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏用户1692782的专栏

    手撕Rtmp协议细节(3)——Rtmp Body

    上一篇讲了RTMP数据包中关于Header的数据组织格式,不过一个完整的RTMP数据包除了Header之外,紧跟着的是RTMP Body,这一篇就继续来说一下RTMP Body的数据组织结构了。 AMF英文全称Action Message Format,是Adobe定义的一套用来进行数据打包的格式,主要的版本有AFM0和AMF3,不过发展至今,实际场景中AMF0一直用的比较多,AMF3相对少见, 那么AMF和RTMP Body又有什么关系呢,不才,RTMP数据包的序列化就是按照AMF的格式进行的。 这样,我们通过对RTMP Body的分析,也熟悉了AMF0的一些标准,当然还有其他的一些类型,朋友有需要可以自行学习,举一反三了,Adobe关于AMF0和AMF3的官方文档放在下方,各位自取哈。 AMF3:https://www.adobe.com/content/dam/acom/en/devnet/pdf/amf-file-format-spec.pdf AMF0:https://wwwimages2

    3.3K40发布于 2020-05-20
  • 来自专栏RTSP/RTMP直播相关

    音视频新人如何快速上手nginx-rtmp-module

    源码结构说明nginx-rtmp-module/├── ngx_rtmp.c // RTMP模块入口定义├── ngx_rtmp.h // 模块的核心数据结构定义 ├── ngx_rtmp_cmd_module.c // 处理RTMP命令消息(connect/publish/play)├── ngx_rtmp_handler.c // RTMP事件处理和连接管理逻辑 ├── ngx_rtmp_core_module.c // RTMP核心配置与指令定义├── ngx_rtmp_live_module.c // RTMP直播流管理模块├── ngx_rtmp_record_module.c // 音视频Codec分析和处理└── ngx_rtmp_shared.c // 共享内存管理2. 在ngx_rtmp_handler.c中实现了对RTMP协议的状态机,处理RTMP消息包的读写。

    39900编辑于 2025-03-26
  • 来自专栏RTSP/RTMP直播相关

    Android平台音视频推送选RTMP还是GB28181?

    技术背景早在2015年,我们发布了RTMP直播推送模块,那时候音视频直播这块场景需求,还不像现在这么普遍,我们做这块的初衷,主要是为了实现移动单兵应急指挥系统的低延迟音视频数据传输。 好多开发者可能会疑惑,走RTMP怎么可能低延迟?网上看到的RTMP推拉流延迟,总归要2-3秒起,如果是自己实现框架,RTMP推拉流逻辑自己实现的话,延迟确实可以控制在毫秒级,这个已无需赘述。 随着无纸化会议、智慧教室、智能化硬件产品的普及,RTMP的技术方案发展一度非常好,有些无人机或智能机器人,都可以自带推送RTMP流数据,配合大牛直播SDK的RTMP低延迟播放器模块,可以实现毫秒级的技术体验 图片我们实现demo的时候,RTMP推送和GB28181都放到一起了,也就是说,可以同时使用RTMP推送和GB28181设备接入,也可以单独使用。 功能设计如下:音频编码:AAC/SPEEX;视频编码:H.264、H.265(RTMP扩展H.265);推流协议:RTMP;[音视频]支持纯音频/纯视频/音视频推送;[摄像头]支持采集过程中,前后摄像头实时切换

    69840编辑于 2023-05-26
  • 来自专栏开源技术小栈

    FFmpeg 通过 RTMP 轻松打造笔记本音视频直播

    FFmpeg 通过 RTMP 轻松打造笔记本音视频直播 原创 Tinywan 开源技术小栈 2025年06月07日 10:08 浙江 查看本机电脑的设备 ffmpeg -list_devices true 来这里查看哦 FFmpeg编码推送到RTMP服务器 推送命令 ffmpeg -f dshow -i video="Lenovo EasyCamera":audio="麦克风 (Realtek High Definition Audio)" \ -vcodec libx264 \ -acodec copy -preset:v ultrafast -tune:v zerolatency \ -f flv "rtmp 来这里查看哦 FFmpeg编码推送到RTMP服务器 推送命令 ffmpeg -f dshow -i video="Lenovo EasyCamera":audio="麦克风 (Realtek High Definition Audio)" \ -vcodec libx264 \ -acodec copy -preset:v ultrafast -tune:v zerolatency \ -f flv "rtmp

    37210编辑于 2025-06-08
  • 音视频项目:实现一个RTMP流媒体服务器

    内容来源:程序员老廖项目概述本项目是一个基于muduo网络库实现的高性能RTMP流媒体服务器,支持:✅ H.264 + AAC 音视频编码格式✅ 多路推流和拉流 ✅ GOP缓存机制 实现快速首屏✅ 音视频同步 ✅ 低延迟优化✅ 时间戳映射 保证播放连续性技术栈网络框架: muduo (高性能网络库)协议支持: RTMP 1.0 规范音视频格式: H.264 + AAC编程语言: C++17构建工具: CMake 视频讲解及源码领取:音视频开发找工作要不要学习流媒体服务器? [Basic Header]3. 推拉流项目实现了一个完整的流媒体服务器,主要特点包括:完整的RTMP协议支持: 握手、命令处理、媒体数据传输高性能网络处理: 基于muduo库的异步网络框架音视频同步机制: 时间戳映射器确保播放连续性GOP

    21510编辑于 2026-02-27
  • 来自专栏coding个人笔记

    rtmp、m3u8直播小记

    视频直播有很多协议,rtmp、rtsp、hls等就自己去了解,业务有做到就会了解一些。 公司经过软硬件测试,发现目前公司使用rtmp流直播延迟是最小的,rtmp需要flash,chrom在今年年底要完全禁止flash,不像现在是默认禁止还能允许。 之前有人说vuecli3使用videojs对于rtmp的播放会有问题,我就是使用vuecli3搭建的,是可以播放的。 移动端使用的是m3u8直播,需要安装一个新的依赖:videojs-contrib-hls 测试了一下,必须要有 播放页使用: import videojs from 'video.js' import 期间还有另外的一些问题,现在也重现不了,主要是有些问题也不知道为什么就解决了,m3u8和mp4还会出现跨域问题,我这边是nginx加允许头header。

    6.4K30发布于 2020-04-24
  • 来自专栏全栈程序员必看

    3、搭建rtmp视频推流服务器

    /configure make && make install 查看pcre版本 pcre-config --version 3.安装zlib库 wget http://www.zlib.net/zlib kill 1128 重启Nginx便可 也又可能是防火墙没有打开80端口 打开80端口 iptables -I INPUT -p tcp --dport 80 -j ACCEPT 5.安装Nginx的rtmp /configure --add-module=/usr/local/nginx/nginx-rtmp-module make & make install 6.配置Nginx的rtmp服务站点 vim ://服务器地址:1935/tv_file 串流密钥:test(这处随便,也就是保存到服务器端的文件名) 开始推流: 然后在服务器段就可以看到 .ts .m3u8文件 cd /usr/local/nginx /html/tv_file ls test-0.ts test-1.ts test-2.ts test.m3u8 8.拉流测试 下载安装 VLC 下载地址 https://www.videolan.org

    4.9K30编辑于 2022-11-01
  • 来自专栏RTSP/RTMP直播相关

    Android平台实现VR头显Unity下音视频数据RTMP推送

    采集到的音视频原始数据,分别投递到Android原生封装的模块,进行编码、打包,通过RTMP传输到服务端,实现毫秒级延迟的RTMP直播方案。 } } 4.Push()封装 获取到推送实例句柄后,设置推送参数和RTMP URL,采集音视频数据,推送到RTMP服务,如需推送麦克风,启动麦克风,并设定采样率和通道数,如需混音: public void 【录像音频控制】NT_PB_U3D_SetRecorderAudio,音频录制开关, 目的是为了更细粒度的去控制录像, 一般不需要调用这个接口, 这个接口使用场景比如同时推送音视频,但只想录制视频,可以调用这个接口关闭音频录制 【推送URL】NT_PB_U3D_SetPushUrl,设置推送的RTMP URL; 40.【开始RTMP推流】NT_PB_U3D_StartPublisher,开始RTMP推流; 41. 【停止RTMP推流】NT_PB_U3D_StopPublisher,停止RTMP推流; 42.【开始录像】NT_PB_U3D_StartRecorder,开始录像; 43.

    1.1K20编辑于 2022-04-28
  • 来自专栏音视频技术学习笔记

    音视频技术(3)- 入门DEMO

    image 推流的实现 推流的实现,需要先搭建一个nginx + rtmp服务器,也不复杂,网上有很多详细的教程 推流后,本地可以用ffplay来查看推流的视频,也可以写个简单的h5页面查看 DOCTYPE html> <html> <head> <title>rtmp</title> <meta charset="utf-8"> <script src="https document.getElementById('video'); var hls = new Hls(); hls.loadSource('http://xxxxx/hls/test2.m<em>3</em>u8 image.png iOS对<em>音视频</em>的支持非常好,写个播放的demo,总共不到80行代码 #import "PlayViewController.h" #import <MediaPlayer *urlStr = [[[NSBundle mainBundle]resourcePath] stringByAppendingPathComponent:@"resource.bundle/war3end.mp4

    1.2K20发布于 2020-03-27
  • 来自专栏关键帧Keyframe

    RTMP 协议:为什么直播推流协议都爱用它?丨音视频基础

    由于协议设计对低延时、音视频同步等能力的良好支持,RTMP 是实时直播场景,尤其是在推流上行链路中,最常用的传输协议之一。 1.1、数据传输流程 使用 RTMP 协议来传输音视频数据的流程大致如下: 在发送端: 把数据封装成消息(Message); 把消息分割成块(Chunk); 将分割后的块(Chunk)通过传输协议(如 在 RTMP 直播中,实时生成视频 Chunk 和音频 Chunk,依次加入到数据流,通过网络发送到客户端。这样的复用传输流,也是音视频同步的关键。 RTMP 块流和 RTMP 协议协同工作很适合于各种和样的音视频程序,从一对一和一对多的直播到视频点播服务再到互动会议程序。 我们将在后面继续探讨其他常见的音视频协议,敬请期待) - 完 -

    4.3K21编辑于 2022-06-13
  • 来自专栏嵌入式项目开发

    音视频开发:大华摄像头配置RTSP与RTMP地址访问视频画面

    例如: http://10.0.0.4 登录之后看到摄像头画面: 配置摄像头码流参数: 网络配置页面上可以看到各个协议的默认端口: 平台接入里可以配置RTMP地址: 三、RTSP地址访问摄像头效果 自己编写拉流软件,获取摄像头数据: 流媒体播放器设计:https://blog.csdn.net/xiaolong1126626497/article/details/105412560 四、大华摄像头的RTMP 地址设置 大华摄像头支持推流到RTMP服务器,要使用这个功能,需要先自己搭建一个RTMP服务器再配置。 windows如何搭建RTMP服务器? 看这里: https://xiaolong.blog.csdn.net/article/details/106391149 linux如何搭建RTMP服务器? RTMP拉流和推流的地址是一样的。

    18.9K30编辑于 2022-01-12
  • 来自专栏RTSP/RTMP直播相关

    Android平台音视频RTMP推送|GB28181对接之动态水印设计

    scale_h = align((int)(h * 1.5 + 0.5), 2); } if(scale_w >0 && scale_h >0) { scale_filter_mode = 3; param scale_height: 缩放高, 必须是偶数, 0或负数不缩放 * * @param scale_filter_mode: 缩放质量, 传0使用默认速度,可选等级范围是:[1,3] ((int)(s_w + 0.5f), 2); scale_h = align( (int)(s_h + 0.5f), 2); scale_filter_mode = 3; int timestamp_index_ = 1; private final int text1_index_ = 2; private final int text2_index_ = 3; private LayerPostThread layer_post_thread_ = null; private void startLayerPostThread() { if (3

    75960编辑于 2022-05-25
  • 来自专栏RTSP/RTMP直播相关

    Android平台实现Unity3D下RTMP推送

    像Unity3D下的RTMP或RTSP播放器一样,好多开发者苦于在Unity环境下,如何高效率低延迟的把数据采集并编码实时推送到流媒体服务器,实现Unity场景下的低延迟推拉流方案。 Android平台Unity3D的RTSP或RTMP播放器,可以参考 https://cloud.tencent.com/developer/article/1800633 本文以Android平台为例 ,介绍下Unity环境下的Android平台RTMP推流,数据采集在Unity完成,数据编码推送,调用大牛直播SDK(官方)Android平台RTMP直播推送SDK原生库对外二次封装的接口,高效率的实现 RTMP推送。 下图系Android平台Unity环境下采集屏幕,编码推送到RTMP服务器,然后Windows平台播放器拉取RTMP流播放,为了方便看到延迟效果,特地在Android端的Unity窗口显示了当前时间,可以看到

    1.2K30发布于 2021-06-08
  • 来自专栏用户1692782的专栏

    手撕rtmp协议细节(2)——rtmp Header

    (如connect) 1(二进制01) 8字节 大部分的rtmp header都是8字节的 2(二进制10) 4字节 比较少见 3(二进制11) 1字节 偶尔出现,低于8字节频率 下面,通过wireshark 第一个字节的低6位,命名为Chunk Stream ID,Chunk Stream ID用来表示消息的级别: chunk stream id 级别 说明 2 low level 3 high level chuk_stream id为3,表示消息的级别为high levle,这一条消息实际上是一条connect的消息。 Type ID字段表示消息类型ID,比如此处0x14表示以AMF0编码(还有AMF3编码,Adobe定义的编码方式)。 4字节的就比较简单了,除了第一个字节之外,只有一个关于时间戳的增量,占用3个字节。 上一张抓包图: ?

    4.5K40发布于 2020-05-20
  • 来自专栏RTSP/RTMP直播相关

    多路RTSP-RTMPRTMP定制版

    大牛直播SDK(Github)多路RTMP/RTSP转RTMP转发软件,系原有转发SDK基础上,官方推出的Windows平台定制版。 如监控类摄像机、NVR等,通过厂商说明或Onvif工具,获取拉流的RTSP地址,图形化配置,完成拉流转发等操作,轻松实现标准RTMP服务器(或CDN)对接。 此外,可以通过点击拉流地址或推流地址栏,实现推拉流地址,同步到左侧预览框,实现推拉流音视频数据预览。 地址; ² 推流RTMP地址:需要转推的RTMP地址; ² 推流播放地址:需要预览的播放地址; ² 音视频转发选项:可选择之转发音频或视频,亦或同时转发音视频; ² 录像参数配置:可选择录制音频或视频, 亦或音视频同时录制,并可设定录像文件前缀。

    3.2K30发布于 2019-09-11
  • 来自专栏全栈程序员必看

    rtmp协议详解_rtmp服务器

    1、消息 2、块 3rtmp的消息类型 4、实例分析rtmp传输过程 一、消息 消息是rtmp的基本数据单元,服务端和客户端通过在网络上发送RTMP消息进行通讯。 协议控制消息使用的ID为 1、2、3、5 和 6 (前面已经介绍过了)。 用户控制消息应该使用消息流ID 0 (以被认为是控制流),并且以RTMP块流发送时以块流ID为2。 3RTMP命令消息 3.1.数据消息(Message Type=18或15) 客户端或服务端通过本消息向对方发送元数据和用户数据。元数据包括数据的创建时间、时长、主题等细节。 示意图如下: 实例分析: (1)客户端向服务端发送”命令消息”中的”createStream命令”: (2)服务端向客户端发送”命令消息”中的”结果(_result)”: 4、发布音视频数据 (1 (3)客户端开始发送音视频数据。

    3.6K12编辑于 2022-11-01
  • 来自专栏linux驱动个人学习

    RTMP协议

    RTMP消息块流和RTMP一起适用于多样性音视频应用程序,从一对一和一对 多向视频点播服务器直接广播到交互式会议应用程序。 2.9 复合技术: 把分开的音视频数据组合成一条音视频流的过程。 2.10 逆复合技术: 复合的反向过程,交叉存取组装的音视频数据,是他们成为最初的音视频数据。 3. rtmp协议握手过程 要建立一个有效的rtmp连接,首先经过”握手”阶段,规则如下: 客户端被指定依次向服务器发送C0,C1,C2三个chunk,服务器向客户端发送S0,S1,S2三个chunk S2 服务器必须等收到C2之后才能发送其他数据(控制信息和音视频数据) 4. rtmp通信过程 简化如下: client--> server   : 发送一个创建流的请求  (C0、C1)。 client--> server   : 开始发送 (C2) client--> server   : 发送音视频数据(这些包用流的索引号来唯一标识) 4.1 握手第一阶段: C0和S0都是rtmp版本包

    1.6K20编辑于 2022-05-10
  • 来自专栏性能优化

    RTMP协议

    RTMP 视频数据 RTMP 视频流格式与 FLV 很相似,通过查看 FLV 的格式文档,就能够知道 RTMP 视频数据应该怎么拼接。 FLV tags 结构 字段 字节 描述 类型 1 0x08:音频 0x09:视频 0x12: 脚本(描述信息) 数据大小 3 数据区的大小,不包括包头。 时间戳 3 当前帧相对时间戳,单位是毫秒。 [1]+sps[2]+sps3 几个字节表示 NALU 的长度 1 0xFF,包长为 (0xFF& 3) + 1,也就是 4 字节表示 SPS 个数 1 0xE1,个数为 0xE1 & 0x1F 也就是 0xAF 的由来: 我们的编码为: 10:AAC,3:44100 采样率 1:采样长度 1:声道。 公众号 杨正友 现在专注音视频和 APM ,涵盖各个知识领域; 只做全网最Geek的公众号,欢迎你的关注!

    2.2K02发布于 2020-11-24
  • 来自专栏嵌入式项目开发

    FFMPEG音视频开发: 完成摄像头、桌面本地录制与rtmp推流(windows)

    download.csdn.net/download/xiaolong1126626497/19323232 二、windows下软件运行效果 (1)主界面效果 (2)保存视频到本地,设置录制间隔为10秒一个视频 (3) 推流视频到B站,必须保证RTMP地址是有效的,如果地址无效软件会自动退出 三、核心代码 代码里除了FFMEG代码之外,主要的核心代码是摄像头颜色转换代码,因为不同的摄像头输出的原始格式不一样,代码里还需要做颜色转换 ()<<"pixelFormat:"<<cloneFrame.pixelFormat(); unsigned char rgb_buffer[VIDEO_WIDTH*VIDEO_HEIGHT*3]

    2.7K20编辑于 2022-01-12
  • 来自专栏RTSP/RTMP直播相关

    Android平台如何实现Unity3D下RTMP推送

    像Unity3D下的RTMP或RTSP播放器一样,好多开发者苦于在Unity环境下,如何高效率低延迟的把数据采集并编码实时推送到流媒体服务器,实现Unity场景下的低延迟推拉流方案。 本文以Android平台为例,介绍下Unity环境下的Android平台RTMP推流,数据采集在Unity完成,数据编码推送,调用大牛直播SDKAndroid平台RTMP直播推送SDK原生库对外二次封装的接口 ,高效率的实现RTMP推送。 下图系Android平台Unity环境下采集屏幕,编码推送到RTMP服务器,然后Windows平台播放器拉取RTMP流播放,为了方便看到延迟效果,特地在Android端的Unity窗口显示了当前时间,可以看到 url.StartsWith("rtmp://")) { push_url_ = "rtmp://192.168.0.199:1935/hls/stream1";

    1.5K20发布于 2021-06-08
领券