本文共 2532 字,大约阅读时间需要 8 分钟。
基于librtmp开发rtmp客户端的demo,主要是按照雷神的demo(见5.1)来修改,修改后的demo能将获取到的音视频数据写成h264文件及aac文件。
介绍flv格式的博客有很多,个人觉得5.2及5.3结合起来看比较好,其中5.2的script tag应该得值是12才是对的。摘录些重要的。
h264的sps及pps数据在发送视频帧之前会首先单独发送过来,需要做保存,因为有些rtmp serevr不会在每一个I帧前添加这些信息。
收到的AAC音频需要根据解析到AAC格式信息添加adts头部,代表AAC音频采样率的2bit其值总是3。/* *注意,这里的packetLen参数为raw aac Packet Len + 7; 7 bytes adts header */static void addADTStoPacket(char* packet, int packetLen, int frequence) { int profile = 2; //AAC LC,MediaCodecInfo.CodecProfileLevel.AACObjectLC; int freqIdx = -1; //48K, 见后面注释avpriv_mpeg4audio_sample_rates中32000对应的数组下标,来自ffmpeg源码 int chanCfg = 2; //见后面注释channel_configuration,Stero双声道立体声 int avpriv_mpeg4audio_sample_rates[] = { 96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000, 7350 }; for(int i = 0; i < 13 ; ++i) { if(frequence == avpriv_mpeg4audio_sample_rates[i]) { freqIdx = i; break; } } if(freqIdx == -1) { printf("Invaild frequence [%d] \n", frequence); return ; } /*int avpriv_mpeg4audio_sample_rates[] = { 96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000, 7350 }; channel_configuration: 表示声道数chanCfg 0: Defined in AOT Specifc Config 1: 1 channel: front-center 2: 2 channels: front-left, front-right 3: 3 channels: front-center, front-left, front-right 4: 4 channels: front-center, front-left, front-right, back-center 5: 5 channels: front-center, front-left, front-right, back-left, back-right 6: 6 channels: front-center, front-left, front-right, back-left, back-right, LFE-channel 7: 8 channels: front-center, front-left, front-right, side-left, side-right, back-left, back-right, LFE-channel 8-15: Reserved */ // fill in ADTS data packet[0] = 0xFF; packet[1] = 0xF1; packet[2] = (char)(((profile-1)<<6) + (freqIdx<<2) +(chanCfg>>2)); packet[3] = (char)(((chanCfg&3)<<6) + (packetLen>>11)); packet[4] = (char)((packetLen&0x7FF) >> 3); packet[5] = (char)(((packetLen&7)<<5) + 0x1F); packet[6] = 0xFC;}
centos6.9上实现的demo,能同时写下flv,h264及AAC文件(只针对48KHZ ,AAC-LC,16bit采样位数)
《1》、
《2》、 《3》、 《4》、 《5》、 《6》、 《7》转载地址:http://htoe.baihongyu.com/