一、RTMP简介及rtmplib库:
RTMP协议是Real Time Message Protocol(实时信息传输协议)的缩写,它是由Adobe公司提出的一种应用层的协议,用来解决多媒体数据传输流的多路复用(Multiplexing)和分包(packetizing)的问题。
简介:
- RTMP是应用层协议,采用(通常)TCP来保证可靠传输;
- 在TCP完成握手链接建立后,还会进行RTMP的一些自己的握手动作,在建立RTMP Connection链接;
- 在Connection链接上会传输一些控制信息,例如SetChunkSize,SetACKWindowSize。CreateStream命令会创建一个Stream链接,用于传输具体的音视频数据和控制这些信息传输的命令信息;
-
RTMP在发送的时候会将数据格式化为Message,然后再将一个个Messsage分为带有Message ID 的Chunk(块),每个Chuck可能是一个完整的Message,可能是一个Message的一部分。在接收端会根据Message ID,长度与data将chunk还原为Message。
雷霄骅的关于rtmp及rtmplib源码解析的地址。
rtmplib:
关于外网的RTMPDump文档介绍了rtmp。
RTMPLIB库中重要方法:
- RTMP_Alloc ():创建会话句柄;
- RTMP_Init ():初始化rtmp;
- RTMP_SetupURL():设置URL;
- RTMP_Connect():建立网络连接;
- RTMP_ConnectStream():建立连接rtmp流会话;
- RTMP_Read():读取rtmp流,当返回0字节时,流已经完成。
- RTMP_Write():发布流,客户端可以在RTMP_Connect () 调用之前 调用RTMP_EnableWrite () 发布流,然后在建立会话后使用 RTMP_Write ();
- RTMP_Pause():在播放流时,暂停和取消暂停;
- RTMP_Seek():移动流播放位置;
- RTMP_Close():关闭流;
- RTMP_Free():释放会话句柄;
- RTMPPacket_Alloc():初始化RTMPPacket的内存空间;
- RTMPPacket:RTMP协议封包;
- RTMPPacket_Free():释放RTMPPacket的内存空间;
二、X264库简介:
x264库中重要方法:
- x264_param_default():给各个参数设置默认值;
- x264_param_default_preset():设置默认的preset,内部调用了x264_param_apply_preset()和x264_param_apply_tune(),在它们之中即可找到各个preset和tune的详细参数区别;
- x264_param_apply_profile():给定的文件配置,流的速率;
- x264_encoder_open():用于打开编码器,其中初始化了libx264编码所需要的各种变量,必须使用x264_encoder_close()进行释放;
- x264_picture_alloc():为图片开辟数据空间,必须使用x264_picture_clean()进行释放;
- x264_encoder_encode():编码一帧YUV为H.264码流
雷霄骅关于X264的源码分析。
三、FAAC库简介:
FAAC是一个MPEG-4和MPEG-2的AAC编码器,其特性是:可移植性好,快速,支持LC/Main/LTP,通过Dream支持DRM,代码小相对于FFMPEG的AAC转码。
libFaac库中重要方法:
- faacEncOpen():打开编码器;
- faacEncGetCurrentConfiguration():获取配置;
- faacEncSetConfiguration() :设置配置;