# Functions
NewBasicSessionStat
@param remoteAddr: 如果当前未知,填入""空字符串.
NewLogDump
@param debugMaxNum: 日志最小级别为debug时,使用debug打印日志次数的阈值.
NewMergeWriter
@param onWritev 回调缓存的1~n个内存块 @param size 回调阈值.
ParseHttpRequest
@return 完整url.
ParseUrl
@param defaultPort: 注意,如果rawUrl中显示指定了端口,则该参数不生效。 注意,如果设置为-1,内部依然会对常见协议(http, https, rtmp, rtsp)设置官方默认端口。.
ReadableNowTime 当前时间,可读字符串形式.
RunSignalHandler 监听SIGUSR1和SIGUSR2信号并回调
TODO(chef): refactor 函数名应与SIGUSR1挂钩.
# Constants
AudioCodecAac StatGroup.AudioCodec.
aac.
h264.
g711a.
g711u.
h265.
opus.
ConfVersion lalserver的配置文件的版本号.
1+16*2.
1+16*3.
1.
1+16.
HttpApiVersion lalserver的HTTP-API功能的版本号.
HttpNotifyVersion lalserver的HTTP-Notify功能的版本号.
LalVersion 整个lal工程的版本号。注意,该变量由外部脚本修改维护,不要手动在代码中修改.
永远重试.
不重试.
RtmpAvcPacketTypeSeqHeader RtmpAvcPacketTypeNalu RtmpHevcPacketTypeSeqHeader RtmpHevcPacketTypeNalu 注意,按照标准文档上描述,PacketType还有可能为2: 2: AVC end of sequence (lower level NALU sequence ender is not required or supported)
我自己遇到过在流结尾时,对端发送 27 02 00 00 00的情况(比如我们的使用wontcry.flv的单元测试,最后一个包)
.
RtmpCodecIdAvc
Video tags -> VIDEODATA -> CodecID
1: JPEG (currently unused) 2: Sorenson H.263 3: Screen video 4: On2 VP6 5: On2 VP6 with alpha channel 6: Screen video version 2 7: AVC
.
RtmpExFrameTypeKeyFrame RtmpExFrameTypeXXX..
CompositionTime不为0时有这个类型.
enhanced-rtmp packetType https://github.com/veovera/enhanced-rtmp.
RtmpFrameTypeKey spec-video_file_format_spec_v10.pdf Video tags VIDEODATA FrameType UB[4] CodecId UB[4] AVCVIDEOPACKET AVCPacketType UI8 CompositionTime SI24 Data UI8[n].
RtmpSoundFormatAac spec-video_file_format_spec_v10.pdf Audio tags AUDIODATA SoundFormat UB[4] SoundRate UB[2] SoundSize UB[1] SoundType UB[1] AACAUDIODATA AACPacketType UI8 Data UI8[n] 注意,视频的CodecId是后4位,音频是前4位.
RtmpTypeIdAck 和 RtmpTypeIdWinAckSize 的含义:
一端向另一端发送 RtmpTypeIdWinAckSize ,要求对端每收够一定数据(一定数据的阈值包含在 RtmpTypeIdWinAckSize 信令中)后,向本端回复 RtmpTypeIdAck 。
常见的应用场景:数据发送端要求数据接收端定时发送心跳信令给本端。.
RtmpTypeIdAudio spec-rtmp_specification_1.0.pdf 7.1.
RtmpTypeIdDataMessageAmf0.
RtmpTypeIdWinAckSize 见 RtmpTypeIdAck.
RtmpUserControlStreamBegin RtmpUserControlXxx..
RtpPacketTypeAvcOrHevc
注意,一般情况下: AVC 96 HEVC 98 AAC 97
但是我还遇到过: AVC 105 HEVC 96 AAC 104
.
"CUSTOMIZEPUB".
"FLVPULL".
"FLVSUB".
"HLSSUB".
"PSPUB".
"RTMPPULL".
"RTMPPUSH".
"RTMPPUBSUB" // 两种可能,pub或者sub.
"RTSPPUB".
"RTSPPULL".
"RTSPPUSH".
这个不暴露给上层.
"RTSPSUB".
"TSSUB".
VideoCodecAvc StatGroup.VideoCodec.
二进制消息片断,.
连接关闭,.
连续消息片断.
心跳检查的ping,.
心跳检查的pong,.
Wso_Rsv3 非控制消息片断保留的操作码,.
Wso_RsvB 为将来的控制消息片断的保留操作码.
文本消息片断,.
# Variables
AddCors2HlsFlag 是否为hls增加跨域相关的http header.
LalFullInfo e.g.
LalHlsM3u8Server e.g.
LalHlsTsServer e.g.
LalHttpApiServer e.g.
LalHttpflvPullSessionUa e.g.
LalHttpflvSubSessionServer e.g.
LalHttptsSubSessionServer e.g.
LalPackSdp e.g.
LalRtmpBuildMetadataEncoder e.g.
LalRtmpConnectResultVersion 植入rtmp server中的connect result信令中 注意,有两个object,第一个object中的fmsVer我们保持通用公认的值,在第二个object中植入 e.g.
LalRtmpHandshakeWaterMark 植入rtmp握手随机字符串中 e.g.
LalRtmpPushSessionConnectVersion e.g.
LalRtspOptionsResponseServer e.g.
LalRtspPullSessionUa e.g.
LalRtspRealm e.g.
LalVersionComma e.g.
LalVersionDot e.g.
# Structs
AvPacket
不同场景使用时,字段含义可能不同。 使用 AvPacket 的地方,应注明各字段的含义。.
BasicSessionStat
包含两部分功能: 1.
EventCommonInfo 所有事件共有的字段.
MergeWriter 合并多个内存块,达到阈值后一次性将内存块数组返回给上层
注意,输入时的单个内存块,回调时不会出现拆分切割的情况.
SessionEventCommonInfo session相关的事件的共有的字段.
# Interfaces
ISessionStat
调用约束:对于Client类型的Session,调用Start函数并返回成功后才能调用,否则行为未定义.
ISessionUrlContext 获取和流地址相关的信息
调用约束:对于Client类型的Session,调用Start函数并返回成功后才能调用,否则行为未定义.
# Type aliases
WsOpcode The WebSocket Protocol https://tools.ietf.org/html/rfc6455
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-------+-+-------------+-------------------------------+ |F|R|R|R| opcode|M| Payload len | Extended payload length | |I|S|S|S| (4) |A| (7) | (16/64) | |N|V|V|V| |S| | (if payload len==126/127) | | |1|2|3| |K| | | +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - + | Extended payload length continued, if payload len == 127 | + - - - - - - - - - - - - - - - +-------------------------------+ | |Masking-key, if MASK set to 1 | +-------------------------------+-------------------------------+ | Masking-key (continued) | Payload Data | +-------------------------------- - - - - - - - - - - - - - - - + : Payload Data continued ..