首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏RTSP/RTMP直播相关

    从RTSP播放遇到RTPMarker探讨RTP规范化打包与稳健切帧

    ​下面以“大牛直播SDK 的 RTSP 播放器遇到 RTP 不带 Marker 位(M bit)”为切入点,结合 RTP/RTCP 基础 与 H.264/H.265/AAC 的负载规范,说明发送端如何规范打包 一、先厘清 Marker 位在各规范里的语义 RTP 基础(RFC 3550):M 位的语义由具体负载格式定义,常用于标记“重要边界事件”(如视频帧边界或音频语音突发边界)。 二、发送端(打包器)如何“规范打包”:H.264/H.2651) 通用约束 时间戳:同一帧(AU)内的所有 RTP 包 使用相同的 RTP 时间戳;视频时钟为 90 kHz。 序号:RTP 序号每包 +1,随机起始。 Marker:仅在“该 AU 的最后一包”置 1;否则为 0。 四、接收端(播放器)如何“稳健容错”:Marker 缺失时的切帧策略即使对端未设置 M 位,播放器也应能“稳健切帧”而不积压卡顿: 按 (SSRC, RTP 时间戳) 聚帧 同一 AU 的所有包时间戳相同

    33510编辑于 2025-09-11
  • 来自专栏TSINGSEE青犀视频

    rtp推流如何使用ffmpeg配置rtp打包模式?

    关于使用rtp推流,TSINGSEE青犀视频团队实际已经研发了很长时间,其中也碰到了不少问题,比如RTP推流客户端无法解析播放,或者遇到不同的报错,但这些目前都已经有了比较完善的解决办法。 在使用RTP推流时,默认ffmpeg使用的打包模式是packetization-mode=1,本文我们和大家分享另一个比较实用的技巧,就是使用ffmpeg配置rtp打包模式。 如何修改打包模式? 关于RTP打包模式的说明如下: 目前ffmpeg默认使用的是1: Not interleaved 模式,针对客户的需要,服务端不支持STAP-A的组包模式,需要每个包单独发送,所以需要配置Single url后面加上如下所示内容: rtp://192.168.99.138:6666? 配置后抓包: 可以看到非I帧之间没有STAP-A的组包模式了,每个NAL都是单独发送的。同时看到对应的SDP也是packetization-mode=0。

    2.9K30发布于 2021-02-25
  • 来自专栏跟Qt君学编程

    Webrtc音频编码并打包RTP

    ❝将PCM数据打包RTP包。 /* 数据有效性判断 */ if (info.encoder_type == AudioEncoder::CodecType::kOther) return; 打包RTP // 对于连续的音频包,需要连续的timestamp。 timestamp += sizeof(int16_t) * encoder->NumChannels() * encoder->RtpTimestampRateHz()/100; /* 创建rtp包 packet.SetTimestamp(timestamp); packet.SetSsrc(ssrc); uint8_t *payload = packet.SetPayloadSize(buffer.size()); /* 装载rtp

    94930编辑于 2023-03-17
  • 来自专栏深度学习与python

    软件打包,有没有更好的方法?!

    ,一位朋友分享了关于亚马逊内部构建系统(https://gist.github.com/terabyte/15a2d3d407285b8b5a0a7964dd6283b0)的设计要点,这也让我对于软件打包这事有了新的认识 有没有更好的方法? 下面咱们捋一援理想构建系统的基本要求: 可稳定复现的构建:如果远程系统能够成功构建,那我们的本地系统也应该可以。 技术挑战 这里我们不打算太过深入,但其实没有现成方案的原因并不是做不到。各种主流操作系统已经能把不同层级的环境妥善隔离开来,为什么软件包这边就不行? 正如 Brazil 项目下一位评论者的留言: 根据个人经验,Brazil 的打包概念之所以没能普及,就是因为之前的问题还没严重到改变的临界点。 而且在打包完成后,这事就过去了。 只有那帮闲着没事干的书呆子才愿意为此专门构建生态系统。

    2.3K50编辑于 2023-10-16
  • 来自专栏单细胞天地

    scanpy和seurat的所有Marker基因可视化方法帮你打包好啦

    我们在进行单细胞亚群命名时,是通过Marker基因来确定细胞的身份。 然而在注释过程中,Marker基因的可视化是必不可少的,以前我们做了一个投票:可视化单细胞亚群的标记基因的5个方法,是基于R编程语言的Seurat包的5个基础函数相信大家都是已经烂熟于心了: VlnPlot sc.pl.matrixplot(adata,markers,'leiden',standard_scale='var') 值得注意的,这个matrixplot可视化方法在基于R编程语言的Seurat包的里面没有对应的方法哦

    3.5K11编辑于 2024-03-21
  • 来自专栏全栈程序员必看

    关于maven打包时, 资源文件没有打包进来的问题

    即,默认打包得到的结果如下 可以看到com.example.mp.mappers包下没有XML文件 我们可以配置pom.xml中的resources标签,指定打包时,加入src/main/java下面的 而由于没有配置,src/main/java下的XML文件就没有打包。 由此可知,默认情况下,maven打包会将资源目录(一般是src/main/resources)中的资源文件打包进去。 /java中的XML文件没有打包进来,而src/main/resources下的资源文件倒是被打包了进来。 使用maven进行打包,若pom.xml中没有配置resources标签,则会采用默认策略,打包资源目录(src/main/resources)下的资源文件。 目录下的文件已经被打包了进来,而后续的打包没有执行mvn clean清除已有的文件。

    4.1K40编辑于 2022-09-02
  • 来自专栏智媒黑板报

    音视频传输:RTP协议详解和H.264打包方案

    所以在视频监控和实时视频传输还是统治级别的存在,没有啥协议能够进行短期取代,当然这都是由RTP特点决定的。 之所以设计RTP协议,就是因为为了规避TCP协议的一些缺点,因为TCP协议在操作系统的协议栈上实现了流量和拥塞控制等机制,但是TCP并没有考虑传输视频的情况,它是针对传输任何数据更通用的做法,但是结合流媒体传输的特点 我的理解就是为了给RTP传输协议增加一些扩展性,防止未来一些新功能的加入,同时允许用户增加一些私有信息和私有功能在里面,大部分音视频场景都没有启用RTP扩展部分,但是也有例外。 其中前者就是编码器吐出来的原始编码数据,没有考虑传输和存储问题。 但是对于发送端组RTP包的一方来说,尽可能找简单的打包方式。对于接受端则需要适配各种发送端的打包方式,因为无法决定输入源的打包方式。这里先分享下我们的打包方式,比较简单: 1.

    7.7K61发布于 2020-11-12
  • 来自专栏全栈程序员必看

    最近做RTSP流媒体的实时广播节目

    //h264视频流打包代码 // NALDecoder.cpp : Defines the entry point for the console application. 此版本号固定为2   rtp_hdr->marker    = 0;   //标志位,由详细协议规定其值。   rtp_hdr->marker=1;    rtp_hdr->seq_no = htons(seq_num ++); //序列号,每发送一个RTP包增1    //设置NALU HEADER,并将这个HEADER // 设置rtp M 位;当前传输的是最后一个分片时该位置1       rtp_hdr->marker=1;       //设置FU INDICATOR,并将这个HEADER填入sendbuf[12 2;  //版本号号,此版本号固定为2 rtp_hdr->marker    = 1;   //标志位,由详细协议规定其值。

    52410编辑于 2022-07-06
  • 来自专栏全栈程序员必看

    音视频协议-RTP协议

    协议解析 协议解析核心包含几个步骤: 利用rtp定义的头进行数据的强转,得到rtp头部信息; 跳过rtp协议头,这里需要注意没有定义cssrc所以需要利用cc计算csrc个数 填充处理,获取填充字节数 identifier marker = (rtpheader->marker == 0)? false:true; payloadtype = rtpheader->payloadtype; if (marker) { if (payloadtype == (RTP_RTCPTYPE_SR ; } csrccount = rtpheader->csrccount; //2 跳过rtp协议头,这里需要注意没有定义cssrc所以需要利用cc计算csrc个数 payloadoffset ; rtphdr->padding = 0; if (gotmarker) rtphdr->marker = 1; else rtphdr->marker = 0; if (gotextension

    1.1K30编辑于 2022-09-13
  • 来自专栏全栈程序员必看

    视音频数据处理入门:UDP-RTP协议解析「建议收藏」

    本文中的程序是一个UDP/RTP协议流媒体数据解析器。该程序可以分析UDP协议中的RTP 包头中的内容,以及RTP负载中MPEG-TS封装格式的信息。 通过修改该程序可以实现不同的UDP/RTP协议数据处理功能。 原理 MPEG-TS封装格式数据打包RTP/UDP协议然后发送出去的流程如下图所示。 图中首先每7个MPEG-TS Packet打包为一个RTP,然后每个RTP打包为一个UDP。 其中打包RTP的方法就是在MPEG-TS数据前面加上RTP Header,而打包RTP的方法就是在RTP数据前面加上UDP Header。 unsigned char version:2; /* expect 2 */ /* byte 1 */ unsigned char payload:7; unsigned char marker

    1.9K30编辑于 2022-09-13
  • 来自专栏全栈程序员必看

    音视频 RED 与 FEC 的 RTP 格式封装

    RTP本身没有提供任何的机制来确保实时的传输或其他的服务质量保证,而是由低层的服务来完成。它不保证传输或防止乱序传输,它不假定下层网络是否可靠,是否按顺序传送数据包。 对接收端来说,如果没有丢包,则忽略FEC 包,如果丢包出现,则FEC 将联合接收到的关联生成的媒体包组,完全恢复丢失的媒体包。 在接收端,主编码与所有次编码作为独立的 RTP 包提取出来,复制冗余编码包的 RTP 头中的 sequence number,SSRC,marker bit,CC field,RTP version,和 恢复出的包将总是没有 extension,padding,或者 CSRC list。在具体实现中,如果其它包中存在这些部分,可以从其它包中将这些部分拷贝过来。 包 A 和 包 C 的 marker bit 被设置。FEC 结构如上所示,保护长度 L0 为 340 字节。 冗余编码打包时,PT 值被设置为 100,FEC PT 值设置为 127。

    2.1K21编辑于 2022-09-22
  • app没有打包到系统里去?还是刷机工具选错了,导致没有下载进去?

    回到为什么out_sys/target/product/i/system_ext/priv-app/MtkLauncher3QuickStep/MtkLauncher3QuickStep.apk 没有打包到系统里去 刷机工具选错了,导致没有下载进去?对,你的现象很可能就是 刷机工具没刷到 system_ext 分区。 但是你刷机后没有日志输出: 表明 刷机时这份 system_ext 没被写入设备。 你观察到: Download Only 时有 userdata、super 等分区显示,但没有 system_ext。

    25710编辑于 2025-10-18
  • 来自专栏呱牛笔记

    PJSIP实现转发RTSP流视频

    if (data == NULL){ return; } int seq = (data[2] << 8) | data[3]; int pt = data[1]&0x7f; int marker == 0){ printf_data(data, 7); printf("[1]seq:%d, old_type:%d, nalu_type:%d marker:%d, len:%d,last_len :%d\r\n", seq,old_type, nalu_type, marker, len, last_rtp_frame_cache_len); } if (nalu_type == 28) { :%d, data:%02x, nalu_type:%d marker:%d, len:%d,last_len:%d\r\n", seq,data[0], nalu_type, marker, len, ), payload, len); last_rtp_frame_cache_len += len; } } if (marker){ //reset 0 if (getFrameCallback

    1.1K20编辑于 2024-03-10
  • 来自专栏Java架构师必看

    mpeg传输流_mp4和mpeg4

    PES流是ES流经过PES打包器处理后形成的数据流,在这个过程中完成了将ES流分组、打包、加入包头信息等操作(对ES流的第一次打包)。PES流的基本单位是PES包。 上述的过程如下图所示: 图片 注意:我的例子中并没有实现音频队列,也没有对音频包做处理。 调用PT_OpenFile函数只是预读数据,并没有开始运行和输出ES帧,所以ES回调函数还没有执行。 ("版本号 : %d\n", rtp_hdr->version); //TRACE("结束标志位 : %d\n", rtp_hdr->marker); //TRACE("负载类型:%d\n" "版本号 : %d\n", rtp_hdr->version); //TRACE("结束标志位 : %d\n", rtp_hdr->marker); //TRACE("负载类型:%d\n",

    2.3K10编辑于 2022-10-24
  • 来自专栏工具使用

    Spring Boot打包的jar运行的时候提示:没有主清单属性

    缘起 日前有一个springboot项目,在本地都运行的好好的,打包成jar放到服务器上去运行的时候报错没有主清单属性,项目中也已经配置了springboot的maven打包插件但是还是不行。 artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> 解决方案 应该是springboot的maven打包插件没配置

    4.2K10发布于 2020-08-20
  • 来自专栏海之滨云视频和流媒体技术

    国标GB28181协议客户端开发(四)实时视频数据传输

    y=0358902090 y字段为十进制整数字符串,表示SSRC值 f= f字段:f= v/编码格式/分辨率/帧率/码率类型/码率大小a/编码格式/码率大小/采样率 这里并没有设置f字段 四、RTP数据发送 RTP数据发送的逻辑比较简单,以下为程序中的代码示意图 图片 以下为RTP封装的演示代码(仅展示部分代码): struct RTPHeader { uint8_t version : 4; // CSRC计数器,指示CSRC标识符的个数 uint8_t marker: 1; // 标记位 uint8_t payloadType: 7; // 负载类型 uint16 header->extension = 0; header->csrcCount = 0; // 设置标记位为0(如果需要设置为1,则在需要设置的地方进行修改) header->marker 报文 uint8_t rtpbuf[RTP_PAYLOAD_MAX_SIZE]; // RTP负载数据缓冲区 struct RTPHeader rtpHeader; // RTP报文头部

    2K50编辑于 2023-07-06
  • 来自专栏饭勺oO的技术博客

    windows右键菜单自动打包发布nuget,没有CICD一样方便!

    构建现代的 .Net 应用离不开 Nuget 的支持,而快速打包 Nuget 成了提高生产率的有效方法。没有CI/CD? 来试试使用windows右键菜单吧 先看右键效果图 有时候我们可能没有CI/CD的条件来自动发布nuget包,这个时候文件夹右键菜单就显得十分高效了 如图所示,直接在文件夹右键可以看到又nuget publish

    37720编辑于 2023-10-18
  • 来自专栏用户1692782的专栏

    手撕RTSP协议系列(12)——RTP包格式

    而实际涉及媒体数据传输使用的是RTP协议,本节我们来介绍一下RTP协议。 RTP概览 RTP是一种应用层协议,传输层协议可以是TCP或者UDP(UDP多一些)! RTP数据包由两部分组成,一部分是RTP Heaeder,一部分是RTP body,RTP Header占用最少12个字节,最多72个字节;另一部分是RTP Payload,用来封装实际的数据负载,如封装 表示不支持扩展RTP头!wireshark的抓包如下 ? CC(CSRC计数) ? CSRC计数器,值为09,表示没有RTP头信息中没有CSRC!wireshark的解析: ? M(marker) ? 值为0,表示该数据包非一帧数据的最后一帧!wireshark的解析: ? ps:当该值为1时,表示该数据包是一帧数据的最后一个数据包! CSRC 由于RTP Header中CC的值为0,所以表示CSRC在本数据包中的个数为0,在此处没有RTP HEADER中允许有0-15个CSRC。 RTP Payload ?

    10K33发布于 2020-10-30
  • 来自专栏技术社区

    vue项目打包后提交到git上为什么没有dist这个文件?

    vue项目中使用npm run build打包后会生成一个dist文件,使用git推送项目后,发现git上少了一个dist文件,为什么明明本地项目中有这个文件而推上去就没有了呢? (2) 用Git Bash 根目录下右键选择“Git Bash Here”进入bash命令窗口; 输入vim .gitignore或touch .gitignore命令,打开文件(没有文件会自动创建); 如图: # dependencies npm包文件 /node_modules # production 打包文件 /build # misc .DS_Store npm-debug.log

    1.7K10编辑于 2022-06-16
  • 来自专栏进击的多媒体开发

    如何实现H.264的实时传输?

    在设计实现H.264的实时传输时,H.264协议基于RTP打包和解包定义于IETF标准-RFC6184,RTC系统需要遵循这个标准来设计打包和解包处理模块。 #01 基本格式 使用RTP对H.264打包和解包需要遵循IETF标准RFC6184, 我们先来了解一下H.264在RTP中的封包协议。 负载类型 (PT):7位 没有特别指定的负载类型,需要通过协商来确定。 序列号(SN):16位 根据RFC 3550设置和使用。对于单NAL单元和非交错打包模式,序列号用于确定NAL单元的解码顺序。 打包模式 H.264的RTP打包模式有三种: 单NAL单元模式 所有的接收端都必须支持这种模式,主要应用于兼容低时延应用中的硬件设备。 MTAP格式一般不在实时系统中使用,考量的重点在于兼顾打包效率和传输效率。 Single-NAL-Unit 打包比较简单,一个NAL封装为一个RTP包。

    1.5K30发布于 2021-09-03
领券