利用libav库中的解析swf_adpcm部分来解析swf_adpcm

在libav库的libavcodec文件夹中,有adpcm.c这个文件,就是用来解析adpcm音频数据,其中有一个方法是用来解析swf_adpcm数据,方法名为adpcm_swf_decode

这个方法的代码段如下

1.需要用到的数据结构:

ff_adpcm_step_table【89】

/**
 * This is the step table. Note that many programs use slight deviations from
 * this table, but such deviations are negligible:
 */
const int16_t ff_adpcm_step_table[89] = {
        7,     8,     9,    10,    11,    12,    13,    14,    16,    17,
       19,    21,    23,    25,    28,    31,    34,    37,    41,    45,
       50,    55,    60,    66,    73,    80,    88,    97,   107,   118,
      130,   143,   157,   173,   190,   209,   230,   253,   279,   307,
      337,   371,   408,   449,   494,   544,   598,   658,   724,   796,
      876,   963,  1060,  1166,  1282,  1411,  1552,  1707,  1878,  2066,
     2272,  2499,  2749,  3024,  3327,  3660,  4026,  4428,  4871,  5358,
     5894,  6484,  7132,  7845,  8630,  9493, 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一段使用 ffmpeg 解析 RTSP 流并转码为 H264 的 C 代码示例: ``` #include <libavformat/avformat.h> #include <libavcodec/avcodec.h> #include <libavutil/avutil.h> int main(int argc, char *argv[]) { // 初始化 libav av_register_all(); avformat_network_init(); // 创建输入上下文 AVFormatContext *input_ctx = NULL; avformat_open_input(&input_ctx, "rtsp://...", NULL, NULL); avformat_find_stream_info(input_ctx, NULL); // 创建输出上下文 AVFormatContext *output_ctx = NULL; avformat_alloc_output_context2(&output_ctx, NULL, "h264", "out.h264"); // 获取视频流 int video_stream_index = -1; for (int i = 0; i < input_ctx->nb_streams; i++) { if (input_ctx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO) { video_stream_index = i; break; } } // 创建视频流 AVStream *out_stream = avformat_new_stream(output_ctx, input_ctx->streams[video_stream_index]->codec->codec); out_stream->codec->codec_id = AV_CODEC_ID_H264; out_stream->codec->codec_type = AVMEDIA_TYPE_VIDEO; avcodec_copy_context(out_stream->codec, input_ctx->streams[video_stream_index]->codec); // 打开输出文件 avio_open(&output_ctx->pb, "out.h264", AVIO_FLAG_WRITE); // 写入头信息 avformat_write_header(output_ctx, NULL); // 循环读取帧 AVPacket packet; while (av_read_frame(input_ctx, &packet) >= 0) { if (packet.stream_index == video_stream_index) { packet.stream_index = out_stream->index; packet.pts = av_rescale_q(packet.pts, input_ctx->streams[video_stream_index]->time_base, out_stream->time_base); packet.dts = av_rescale_q(packet.dts, input_ctx->streams[video_stream_index]->time_base, out_stream->time_base); packet.duration =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值