Red de conocimiento informático - Conocimiento de la instalación - Solicite el código de compresión de audio ffmpeg (wav comprimido en wma)

Solicite el código de compresión de audio ffmpeg (wav comprimido en wma)

Esto es sencillo.

La idea general es

1. Abrir el archivo wav

2. Abrir el archivo wma para generar

3. Leer el marco de datos continuamente

4. Después de leer, decodificar y escribir en wma

5. Cierra el archivo wav

6. Es problemático reescribir el ejemplo. Publique algún código

#include "Debug.h"

#include "FFMpegAVFileReader.h"

#include "FFMpegAVFileReaderFactory.h"

#include lt;sstreamgt;

#include "yk_convert.h"

carácter estático h264_head[4] = {(char)0x00, (char) 0x00, (char )0x00, (char)0x01};

espacio de nombres YK

{

FFMpegAVFileReader::FFMpegAVFileReader()

{

ffmpeg_avcodec_init();

ffmpeg_av_register_all();

av_log_set_callback(ffmpeg_log_callback

m_format_context = 0;

m_input_format = 0;

m_format_parameters = 0;

m_packet = (AVPacket*)av_mallocz(sizeof(AVPacket)); >

FFMpegAVFileReader::~FFMpegAVFileReader()

{

Cerrar()

av_free(m_packet

}

avfile_reader_param_t* FFMpegAVFileReader::GetParam()

{

//YK::AutoLock l(m_lock);

amplificador de retorno ;m_param;

}

void FFMpegAVFileReader::Seek(int pts)

{

YK::AutoLock l(m_lock) ;

int ret = av_seek_frame(m_format_context, -1, (YK::int64_t)pts * (YK::int64_t)1000, AVSEEK_FLAG_BACKWARD | AVSEEK_FLAG_ANY); ret gt; = 0)

//{

// para(int i = 0; i lt; m_format_context-gt; nb_streams; i )

// {

// avcodec_flush_buffers( m_format_context-gt; transmisiones[i]-gt; c

odec );

// }

//}

//std::stringstream ss;

//ss lt; lt; "pts = " lt; lt; pts

// lt; lt; " ret = " lt; ret lt; lt; /OutputDebugString(ss.str().data());

}

void FFMpegAVFileReader::GetDuration(doubleamp; inicio, doubleamp; final)

{

//YK:: AutoLock l(m_lock);

inicio = (doble)(m_start_time / 1000000

fin = inicio (doble) (m_duration / 1000000);

}

service_error_t FFMpegAVFileReader::Open(int time_out)

{

YK::AutoLock l (m_lock);

service_error_t service_error;

// Abrir archivo

if (av_open_input_file(amp; m_format_context, TToANSI(m_param.input_file_path).data() , m_input_format, 0, m_format_parameters) lt; 0)

{

service_error.init(service_error_type_failed, "av_open_input_file falló"

return service_error; p>

}

// Consultar información de flujo

if(av_find_stream_info(m_format_context) lt; 0)

{

service_error.init(service_error_type_failed, "av_find_stream_info falló");

return service_error

}

m_start_time = m_format_context-gt; >

m_duration = m_format_context-gt;duration;

#ifdef _DEBUG

pFile = fopen("D:/1.out","w b");

#endif

// Guardar información de la transmisión

av_stream_info_t av_stream_info;

for(unsigned int i = 0; i lt; m_format_context-gt; nb_streams;

)

{

AVStream *st = m_format_context-gt; transmisiones[i];

AVCodecContext *enc = st-gt;

if(enc-gt; codec_type == AVMEDIA_TYPE_AUDIO)

{

// Audio

av_stream_info.av_stream_info_type = av_stream_info_type_audio;

av_stream_info.codec_id = codec_id_none;

//channel_layout = enc-gt;channel_layout;

av_stream_info.audio_channels = enc-gt;canales;

av_stream_info .audio_samplepersec = enc-gt;sample_rate;

av_stream_info.audio_bitpersample = yk_sample_format(enc-gt;sample_fmt);

//audio_sample_fmt = enc-gt;sample_fmt;

//input_codecs[nb_icodecs] = avcodec_find_decoder_by_name(audio_codec_name);

av_stream_info.codec_id = yk_code_id(enc-gt;codec_id);

av_stream_info.extradata_size = enc-gt; extradata_size;

if(av_stream_info.extradata_size)

memcpy(av_stream_info.extradata, enc-gt; extradata, enc-gt; extradata_size

if( av_stream_info.codec_id == codec_id_mp3)

{

av_stream_info.extradata_size = sizeof(mpeg1_waveformat_extradata);

mpeg1_waveformat_extradata* pMpeg1WaveFormat = (mpeg1_waveformat_extradata*)av_stream_info.extradata;

pMpeg1WaveFormat-gt; dwPTSHigh = 0

pMpeg1WaveFormat-gt; /pag

>

pMpeg1WaveFormat-gt; fwHeadFlags = 25

pMpeg1WaveFormat-gt; -gt; fwHeadModeExt = 1;

pMpeg1WaveFormat-gt; wHeadEmphasis = 1;

}

AddStreamInfo(av_stream_info); = i;

}

else if(enc-gt;codec_type == AVMEDIA_TYPE_VIDEO)

{

// vídeo

av_stream_info.av_stream_info_type = av_stream_info_type_video;

av_stream_info.codec_id = codec_id_none;

av_stream_info.video_width = enc-gt;width;

av_stream_info. video_height = enc-gt;height;

av_stream_info.video_profile = enc-gt;profile;

av_stream_info.video_level = enc-gt;level;

si (av_stream_info.video_profile lt; 0)

{

av_stream_info.video_profile = 77

}

if(av_stream_info.video_level lt; ; 0)

{

av_stream_info.video_level = 30

}

av_stream_info.extradata_size =