流媒体分析
文章平均质量分 63
本文主要对流媒体协议分析
dongfangxingyu1
这个作者很懒,什么都没留下…
展开
-
live555 rtp 封装h264&h265 数据
1.RTP包头的封装打包时,每帧数据包均需要添加二中所述RTP包头,对于每路视频流,RTP包头除序列号外,基本保持不变;另一个要注意的时,由于包头需要按位填充,当填充/发送数据时,应注意发送端数据的大小端限制。2.数据流的包头此处以h264,h265,,在rtp包头后,应按格式封装自己的数据头,其中h264为一个字节,h265为两个字节,H264打包:视频包时需要考虑到MTU的大小,每包数据不能超过MTU的大小,通常情况下,设备是不知道当前网络的MTU大小的。H264数据打包格式如下原创 2022-04-02 14:53:09 · 1422 阅读 · 0 评论 -
live555 创建rtp 及rtcp 服务
1.创建 ServerMediaSession 类根据上篇:llive 555 信令类及消息,可知处理live555 处理消息DESCRIBEvoid RTSPServer::RTSPClientConnection::handleCmd_DESCRIBE(char const* urlPreSuffix, char const* urlSuffix, char const* fullRequestStr) { char urlTotalSuffix[2*RTSP_PARAM_STRING_原创 2022-03-31 15:41:17 · 770 阅读 · 0 评论 -
live555 编译链接
wget http://www.live555.com/liveMedia/public/live555-latest.tar.gztar xzf live555-latest.tar.gzcd live./genMakefiles linux-64bit #注意后面这个参数是根据当前文件夹下config.获取得到的make最后就会在当前目录下生成media原创 2017-12-30 15:25:53 · 472 阅读 · 0 评论 -
live555 信令分发
原创 2017-12-30 15:33:27 · 466 阅读 · 0 评论 -
live5 数据发送及封装
1. live 555 数据发送流程 每一行类及重要函数SPServer::RTSPClientSession::handleCmd_PLAY ->subsession->startStreamOnDemandServerMediaSubsession::startStream->->streamState->startPlayingStreamState::startPlayin原创 2017-12-30 15:41:53 · 406 阅读 · 0 评论 -
流媒体分析之rtmp之ffmpeg 实现整体流程
1. flv 格式封装:libavformat/flvenc.c。2. rtmp 下面处理rtmp 消息封装。原创 2022-09-06 16:38:05 · 426 阅读 · 0 评论 -
流媒体分析之rtmp ffmpeg 实现-两种技术实现
rtmp 分析原创 2022-09-06 16:05:15 · 604 阅读 · 0 评论 -
流媒体分析之rtmp 协议flv 封装
flv 是 flash video 的缩写,是 Adobe Flash payler 支持的一种流媒体播放格式。flv 是一种层级格式,除了一个 flv header 外,剩下全是由 一个个 tag 组成。tag 是由 tag 头和 tag 数据组成。tag 类型分为音频、视频、脚本,一共三种类型。每一种数据类型又有自己的 tag 头。引用网络图片:2. AMF该类型Tag又被称为MetaData Tag,存放一些关于FLV视频和音频的元信息,比如:duration、width、height等。原创 2022-09-07 23:51:21 · 1295 阅读 · 0 评论 -
流媒体分析之rtmp 协议封装
Msg Header占用11个字节,这种结构最浪费,一般用于流开始发送的第一个chunk报文,且只有这种情况下,报文中的timestamp才是一个绝对时间, 后续chunk报文的Msg Header中要么是没有timestamp,有timestamp也只是相对前一个chunk报文的时间增量。实际上为了处理方便,RTMP协议软件在具体实现时总是先读取一个字节的Basic Header,并根据前面2bit的format信息和后面6bit的CSID信息,判断报文的实际结构。原创 2022-09-08 15:36:19 · 632 阅读 · 0 评论 -
流媒体分析之rtmp 协议srs 服务器实现
执行 handler->on_tcp_client, handler->on_tcp_client 指向SrsBufferListener::on_tcp_client。SrsTcpListener::listen : 执行srs_tcp_listen 进行tcp 监听。SrsBufferListener::on_tcp_client 函数执行server->accept_client ,server->accept_client 指向SrsServer::accept_client。原创 2022-09-12 23:52:28 · 534 阅读 · 0 评论 -
流媒体分析之rtmp协议srs服务器数据收发
conn->handle_publish_message 指向SrsRtmpConn::handle_publish_message。process_publish_message ,处理source->on_audio 及source->on_video 函数。执行_conn->handle_publish_message 函数。rtmp->send_and_free_messages 发送数据。handle_publish_message 处理。do_cycle 执行。原创 2022-09-19 23:17:07 · 517 阅读 · 0 评论 -
流媒体分析之srt 测试环境搭建
SRS/5.0(Bee)是一款简单、高效、实时的视频服务器,支持RTMP/WebRTC/HLS/HTTP-FLV/SRT。SRS是一个简单高效的实时视频服务器,支持RTMP/WebRTC/HLS/HTTP-FLV/SRT/GB28181。Note: 这是典型的源站和边缘集群的架构,适用于需要高并发的场景,高清大图请参考。Note: 简单的单节点架构,适用于大多数场景,大图请看。ffmpeg 支持srt 协议,我们采用libsrt。原创 2022-09-09 10:36:51 · 1733 阅读 · 0 评论 -
流媒体分析之srt协议ffmpeg 实现
1. mpegts 封装格式会后面系列文章中讲叙,在ffmpeg 中的封装实现接口如下:mpegtsenc.c。解封封装:FFmpeg-n4.3.3/libavformat/mpegts.c。srt 音视频数据是基于mpegts 封装的,ffmpeg 数据流程。原创 2022-09-09 11:02:35 · 1609 阅读 · 0 评论 -
流媒体分析之srt 协议mpegts 封装
MPEG2-PS主要应用于存储的具有固定时长的节目,如DVD电影,而MPEG-TS则主要应用于实时传送的节目,比如实时广播的电视节目。‘11’ 调整字段后为有效载荷,调整字段中的前一个字节表示调整字段的长度length,有效载荷开始的位置应再偏移[length]个字节。PES包非定长,音频的PES包小于等于64K,视频的一般为一帧一个PES包。PMT在传送流中用于指示组成某一套节目的视频、音频和数据在传送流中的位置,即对应的TS包的PID值,以及每路节目的节目时钟参考(PCR)字段的位置。原创 2022-09-09 14:20:03 · 1673 阅读 · 0 评论 -
流媒体分析之srt 协议libsrt 实现
对于常规的单向传输,假设A向B发送数据,该方向的延时量Latency应该是A的发送方向延时(PeerLatency)和B的接收方向延时(RecLatency)的最大值,该延时量在握手阶段就已由双方协商确定。众所周知,SRT的传统优势领域是点对点的实时音视频传输,而近两年,SRT协议在上行推流方面有了迅速的发展,很多主流平台和公司都支持使用SRT协议来代替RTMP协议进行上行推流,其中的关键点就是SRT的StreamID功能,而StreamID功能就包含在SRT握手数据包的配置扩展模块中。原创 2022-09-09 14:56:43 · 2211 阅读 · 1 评论 -
流媒体分析之srt 之libsrt 分析:
1.在上一个章节我们分析ffmpeg 调用libsrt 库实现对srt 协议实现。原创 2022-09-09 15:56:55 · 1221 阅读 · 0 评论 -
流媒体分析之srt 协议srs 服务器实现
SrsFastCoroutine 类构造函数:hander 指向SrsSrtListener,handler->cycle 实际上调用SrsSrtListener::cycle. SrsSrtListener::cycle 函数调用handler_->on_srt_client。SrsSrtServer::accept_srt_client 函数主要主要作用:为每个srt 推拉流创建SrsMpegtsSrtConn,并执行SrsMpegtsSrtConn::start. 至此,srt 监听服务功能完成。原创 2022-09-11 23:20:07 · 817 阅读 · 0 评论 -
流媒体分析之srt 协议srs 服务器数据收发
on_srt_packet 创建SrsSrtPacket 函数.执行 srt_source_->on_packet。on_packet : srt 推流 给每个消费者 consumer->enqueue 推数据;do_publishing 函数,调用srt_conn_->read 函数接收推流数据。bridge_->on_packet :srt 转换其他协议的流数据。srt_conn_->write 发送数据。on_srt_packet 函数处理数据。2. srs服务器处理srt拉流处理。原创 2022-09-20 18:45:23 · 885 阅读 · 0 评论 -
流媒体分析之webrtc协议测试环境搭建
1. ffmpeg 支持webrtc 协议,使用杨大神MetaRTC 库实现。ffmpeg 实现webrtc 推拉流到srs 服务上。这个章节我们搭建webrtc 测试环境。MetaRTC是一个为嵌入式/物联网打造的webRTC库,为第三代互联网 元宇宙提供webRTC能力。MetaRTC实现了webrtc协议,提供纯C和C++两种版本接口。1. 编译metartc 库函数。编译 mbedtls3 库。原创 2022-09-13 10:06:14 · 5802 阅读 · 0 评论 -
流媒体分析之webrtc协议之ffmpeg 实现
音视频数据接收:libmetartc 库收到数据,通过g_ff_rtc_receiveAudio 及g_ff_rtc_receiveVideo 接口返回音视频数据。webrtc_open 函数调用yang_create_metaConnection 函数创建webrtc 服务操作接口。webrtc_read_header 调用webrtc_open 连接srs服务器。webrtc_init 函数调用webrtc_open 函数。connectSfuServer 连接srs 服务器。原创 2022-09-13 10:36:35 · 4224 阅读 · 0 评论 -
流媒体分析之webrtc之metartc 实现。
1. 连接srs 服务器yang_srs_connectRtcServer,调用yang_srs_getSignal 发送信令及sdp 信息交换。yang_sdp_querySrs 函数:yang_http_post 通过发送本段sdp及接收srs服务器的sdp 信息。yang_http_post 通过http 协议post 接口,发送sdp,并接收对端的sdp。调用yang_rtcconn_getRemoteSdp,解析sdp 信息,函数 yang_srs_getSignal,封装sdp 信息。原创 2022-09-13 11:20:15 · 5838 阅读 · 0 评论 -
流媒体协议分析之webrtc之rtp
序列号 Sequence number(SN): 16bits,用于标识发送者所发送的RTP报文的序列号,每发送一个报文,序列号增1,序列号的初始值是随机产生的。如不同的有效载荷有不同的含义,对于视频,标记一帧的结束;对于音频,标记会话的开始。NALU 单元的开始, 必须是 "00 00 00 01" 或 "00 00 01", NALU 头仅一个字节, 其后都是 NALU 单元内容.P: 填充标志,占1bit,如果P=1,则在该报文的尾部填充一个或多个额外的八位组,它们不是有效载荷的一部分。原创 2022-09-13 15:35:07 · 3438 阅读 · 0 评论 -
流媒体协议分析之webrtc之rtcp
TCP作为RTP控制协议,对于弱网下音视频质量和会话控制具有重要的作用。1.V:RTCP的版本号,一定等于2;P:如果设置,填充位表示数据包包含末尾的附加填充八位字节,不属于控制信息,但包含在长度字段中;FMT:反馈消息类型,并根据PT类型的不同而含义不同。比如当PT=200时,表示ReportBlock的个数;当PT=205时,表示反馈包的类型,1:NACK丢包重传,15:TWCC拥塞控制PT:负载类型,详细请看下表。原创 2022-12-12 15:06:16 · 791 阅读 · 1 评论 -
流媒体协议分析之webrtc 协议 srs 服务器实现
SrsGoApiRtcPlay和SrsGoApiRtcPublish类处理,new SrsRtcConnection 对象。2. webrtc 通信,通过SDP,知道了udp 通信端口。1.信令交互 ,sdp信令交互。原创 2022-10-18 15:35:01 · 1395 阅读 · 4 评论