translate AudioStream into English

translate AudioStream into English
pull/166/head
xufulong 5 years ago
parent a661a76dcc
commit bbe0d01ef8
  1. 18
      Live/src/main/cpp/AudioStream.cpp
  2. 3
      Live/src/main/cpp/AudioStream.h
  3. 5
      Live/src/main/cpp/VideoStream.h
  4. 6
      Live/src/main/cpp/safe_queue.h

@ -20,28 +20,22 @@ void AudioStream::setAudioCallback(AudioCallback audioCallback) {
} }
void AudioStream::setAudioEncInfo(int samplesInHZ, int channels) { void AudioStream::setAudioEncInfo(int samplesInHZ, int channels) {
//打开编码器
mChannels = channels; mChannels = channels;
//一次最大能输入编码器的样本数量 (一个样本是16位 2字节) //open faac encoder
//编码后的最大字节数
audioCodec = faacEncOpen(static_cast<unsigned long>(samplesInHZ), audioCodec = faacEncOpen(static_cast<unsigned long>(samplesInHZ),
static_cast<unsigned int>(channels), static_cast<unsigned int>(channels),
&inputSamples, &inputSamples,
&maxOutputBytes); &maxOutputBytes);
//设置编码器参数 //set encoder params
faacEncConfigurationPtr config = faacEncGetCurrentConfiguration(audioCodec); faacEncConfigurationPtr config = faacEncGetCurrentConfiguration(audioCodec);
//指定为 mpeg4 标准
config->mpegVersion = MPEG4; config->mpegVersion = MPEG4;
//lc 标准
config->aacObjectType = LOW; config->aacObjectType = LOW;
//16位
config->inputFormat = FAAC_INPUT_16BIT; config->inputFormat = FAAC_INPUT_16BIT;
// 编码出原始数据
config->outputFormat = 0; config->outputFormat = 0;
faacEncSetConfiguration(audioCodec, config); faacEncSetConfiguration(audioCodec, config);
//输出缓冲区 编码后的数据 用这个缓冲区来保存 //output buffer
buffer = new u_char[maxOutputBytes]; buffer = new u_char[maxOutputBytes];
} }
@ -56,7 +50,7 @@ RTMPPacket *AudioStream::getAudioTag() {
int bodySize = static_cast<int>(2 + len); int bodySize = static_cast<int>(2 + len);
RTMPPacket *packet = new RTMPPacket; RTMPPacket *packet = new RTMPPacket;
RTMPPacket_Alloc(packet, bodySize); RTMPPacket_Alloc(packet, bodySize);
//双声道 //channel layout: stereo
packet->m_body[0] = 0xAF; packet->m_body[0] = 0xAF;
if (mChannels == 1) { if (mChannels == 1) {
packet->m_body[0] = 0xAE; packet->m_body[0] = 0xAE;
@ -74,7 +68,7 @@ RTMPPacket *AudioStream::getAudioTag() {
} }
void AudioStream::encodeData(int8_t *data) { void AudioStream::encodeData(int8_t *data) {
//返回编码后数据字节的长度 //encode a frame, and return encoded len
int byteLen = faacEncEncode(audioCodec, reinterpret_cast<int32_t *>(data), int byteLen = faacEncEncode(audioCodec, reinterpret_cast<int32_t *>(data),
static_cast<unsigned int>(inputSamples), static_cast<unsigned int>(inputSamples),
buffer, buffer,
@ -83,7 +77,7 @@ void AudioStream::encodeData(int8_t *data) {
int bodySize = 2 + byteLen; int bodySize = 2 + byteLen;
RTMPPacket *packet = new RTMPPacket; RTMPPacket *packet = new RTMPPacket;
RTMPPacket_Alloc(packet, bodySize); RTMPPacket_Alloc(packet, bodySize);
//双声道 //stereo
packet->m_body[0] = 0xAF; packet->m_body[0] = 0xAF;
if (mChannels == 1) { if (mChannels == 1) {
packet->m_body[0] = 0xAE; packet->m_body[0] = 0xAE;

@ -22,7 +22,8 @@ public:
void encodeData(int8_t *data); void encodeData(int8_t *data);
RTMPPacket* getAudioTag(); RTMPPacket *getAudioTag();
private: private:
AudioCallback audioCallback; AudioCallback audioCallback;
int mChannels; int mChannels;

@ -8,13 +8,13 @@
#include "include/x264/x264.h" #include "include/x264/x264.h"
class VideoStream { class VideoStream {
typedef void (*VideoCallback)(RTMPPacket* packet); typedef void (*VideoCallback)(RTMPPacket *packet);
public: public:
VideoStream(); VideoStream();
~VideoStream(); ~VideoStream();
//创建x264编码器
void setVideoEncInfo(int width, int height, int fps, int bitrate); void setVideoEncInfo(int width, int height, int fps, int bitrate);
void encodeData(int8_t *data); void encodeData(int8_t *data);
@ -35,6 +35,7 @@ private:
int ySize; int ySize;
int uvSize; int uvSize;
VideoCallback videoCallback; VideoCallback videoCallback;
void sendSpsPps(uint8_t *sps, uint8_t *pps, int sps_len, int pps_len); void sendSpsPps(uint8_t *sps, uint8_t *pps, int sps_len, int pps_len);
void sendFrame(int type, uint8_t *payload, int i_payload); void sendFrame(int type, uint8_t *payload, int i_payload);

@ -37,7 +37,7 @@ public:
} }
void push( T new_value) { void push(T new_value) {
#ifdef C11 #ifdef C11
//锁 和智能指针原理类似,自动释放 //锁 和智能指针原理类似,自动释放
lock_guard<mutex> lk(mt); lock_guard<mutex> lk(mt);
@ -50,7 +50,7 @@ public:
if (work) { if (work) {
q.push(new_value); q.push(new_value);
pthread_cond_signal(&cond); pthread_cond_signal(&cond);
}else{ } else {
releaseCallback(new_value); releaseCallback(new_value);
} }
pthread_mutex_unlock(&mutex); pthread_mutex_unlock(&mutex);
@ -59,7 +59,7 @@ public:
} }
int pop(T& value) { int pop(T &value) {
int ret = 0; int ret = 0;
#ifdef C11 #ifdef C11
//占用空间相对lock_guard 更大一点且相对更慢一点,但是配合条件必须使用它,更灵活 //占用空间相对lock_guard 更大一点且相对更慢一点,但是配合条件必须使用它,更灵活

Loading…
Cancel
Save