• 大小: 15KB
    文件类型: .c
    金币: 2
    下载: 0 次
    发布日期: 2024-01-06
  • 语言: 其他
  • 标签: ffmpeg  视频转码  hls  

资源简介

ffmpeg转码为hls的代码,里面涉及具体的转码流程以及参数设置.ffmpeg转码为hls的代码,里面涉及具体的转码流程以及参数设置

资源截图

代码片段和文件信息

#include 

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define BUF_SIZE_20K 2048000
#define BUF_SIZE_1K 1024000

static AVFormatContext *ifmt_ctx;
static AVFormatContext *ofmt_ctx;
static SwrContext* pSwrCtx = NULL;
AVBitStreamFilterContext* aacbsfc = NULL;

void initSwr(int audio_index)  
{  
    if (ofmt_ctx->streams[0]->codec->channels != ifmt_ctx->streams[audio_index]->codec->channels  
        || ofmt_ctx->streams[0]->codec->sample_rate != ifmt_ctx->streams[audio_index]->codec->sample_rate  
        || ofmt_ctx->streams[0]->codec->sample_fmt != ifmt_ctx->streams[audio_index]->codec->sample_fmt)  
    {  
        if ( NULL == pSwrCtx )   
        {  
            pSwrCtx = swr_alloc();  
        }  
// #if LIBSWRESAMPLE_VERSION_MINOR >= 17    // 根据版本不同,选用适当函数  
        // av_opt_set_int(pSwrCtx “ich“ ifmt_ctx->streams[audio_index]->codec->channels 0);  
        // av_opt_set_int(pSwrCtx “och“ ofmt_ctx->streams[audio_index]->codec->channels 0);  
        // av_opt_set_int(pSwrCtx “in_sample_rate“  ifmt_ctx->streams[audio_index]->codec->sample_rate 0);  
        // av_opt_set_int(pSwrCtx “out_sample_rate“  ofmt_ctx->streams[audio_index]->codec->sample_rate 0);  
        // av_opt_set_sample_fmt(pSwrCtx “in_sample_fmt“ ifmt_ctx->streams[audio_index]->codec->sample_fmt 0);  
        // av_opt_set_sample_fmt(pSwrCtx “out_sample_fmt“ ofmt_ctx->streams[audio_index]->codec->sample_fmt 0);  
  
// #else  
        pSwrCtx = swr_alloc_set_opts(NULL             
            ofmt_ctx->streams[audio_index]->codec->channel_layout   
            ofmt_ctx->streams[audio_index]->codec->sample_fmt   
            ofmt_ctx->streams[audio_index]->codec->sample_rate  
            ifmt_ctx->streams[audio_index]->codec->channel_layout   
            ifmt_ctx->streams[audio_index]->codec->sample_fmt   
            ifmt_ctx->streams[audio_index]->codec->sample_rate  
            0 NULL);  
// #endif  
        swr_init(pSwrCtx);  
    }  
}  
  
//setup_array函数摘自ffmpeg例程  
static void setup_array(uint8_t* out[32] AVframe* in_frame int format int samples)  
{  
    if (av_sample_fmt_is_planar(format))   
    {  
        int i;
        int plane_size = av_get_bytes_per_sample((format & 0xFF)) * samples;
        format &= 0xFF;  
          
        //从decoder出来的frame中的data数据不是连续分布的,所以不能这样写:  
        in_frame->data[0]+i*plane_size;  
        for (i = 0; i < in_frame->channels; i++)  
        {  
            out[i] = in_frame->data[i];  
        }  
    }   
    else  
    {  
        out[0] = in_frame->data[0];  
    }  
}

int TransSample(AVframe *in_frame AVframe *out_frame int audio_index)  
{  
    int ret;  
    int max_dst_nb_samples = 4096;  
   

评论

共有 条评论