当前位置: 首页 > news >正文

数字媒体应用 网站开发店铺推广

数字媒体应用 网站开发,店铺推广,网站备案网站名称,深圳推广公司一、音频播放流程 1、打开音频文件 通过 avformat_open_input() 打开媒体文件并分配和初始化 AVFormatContext 结构体。 函数原型如下#xff1a; int avformat_open_input(AVFormatContext **ps, const char *url, AVInputFormat *fmt, AVDictionary **options); 参数说…一、音频播放流程 1、打开音频文件 通过  avformat_open_input() 打开媒体文件并分配和初始化  AVFormatContext  结构体。 函数原型如下 int avformat_open_input(AVFormatContext **ps, const char *url, AVInputFormat *fmt, AVDictionary **options); 参数说明 - ps指向 AVFormatContext 结构体指针的指针用于存储打开的媒体文件的信息。 - url要打开的媒体文件的 URL 或文件路径。 - fmt指定输入格式通常可以设置为 NULL由 FFmpeg 根据文件内容自动检测。 - options附加选项可以传入一些额外的选项参数。 2、查找输入流信息 调用  avformat_find_stream_info()  函数将会读取媒体文件中的帧解析它们的头部 并填充 AVFormatContext 中的流信息,通过访问 AVFormatContext 的 streams 字段来获取每个流的详细信息。 函数原型如下 int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options); 参数说明 - ic指向已打开媒体文件的 AVFormatContext 结构体的指针。 - options指向包含附加选项的 AVDictionary 指针。 3、查找流索引 使用 av_find_best_stream() 从媒体文件中找到最佳的流索引 函数原型如下 int av_find_best_stream(AVFormatContext *ic, enum AVMediaType type, int wanted_stream, int related_stream, AVCodec **decoder_ret, int flags); 参数说明 - ic指向已打开媒体文件的 AVFormatContext 结构体的指针。 - type要查找的流类型可以是 AVMEDIA_TYPE_VIDEO、AVMEDIA_TYPE_AUDIO 等。 - wanted_stream期望的流索引如果为负值则表示没有特定的偏好。 - related_stream相关流索引用于查找与之相关的最佳流。 - decoder_ret用于返回找到的解码器。 - flags附加标志可以用来指定额外的查找选项。 4、查找解码器 使用 avcodec_find_decoder() 查找符合指定解码器名称的解码器。 函数原型如下 AVCodec *avcodec_find_decoder(enum AVCodecID id); 参数说明 - id要查找的解码器的 ID。 5、初始化解码上下文 调用  avcodec_alloc_context3()  函数会为特定的编解码器分配一个  AVCodecContext  结构体并对其进行初始化。 AVCodecContext  结构体包含了编解码器的相关参数和状态信息比如编解码器类型、解码参数、帧率等。 函数原型如下 AVCodecContext *avcodec_alloc_context3(const AVCodec *codec); 参数说明 - codec指定要使用的编解码器可以通过 avcodec_find_decoder() 或其他方式获取。 6、获取解码参数 调用 avcodec_parameters_to_context() 函数可以方便地将 AVCodecParameters 结构体中的参数如编解码器类型、帧率、分辨率等复制到 AVCodecContext 结构体中从而准备进行编解码操作。 函数原型如下 int avcodec_parameters_to_context(AVCodecContext *codec, const AVCodecParameters *par); 参数说明 - codec要填充参数的 AVCodecContext 结构体指针。 - par包含编解码器参数的 AVCodecParameters 结构体指针。 7、打开解码器 调用 avcodec_open2() 函数可以打开并初始化指定的编解码器上下文使其准备好进行编解码操作。 函数原型如下 int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options); 参数说明 - avctx要打开和初始化的编解码器上下文。 - codec要使用的编解码器可以通过 avcodec_find_decoder() 或其他方式获取。 - options可选的字典参数用于设置编解码器的选项。 打开解码器时可以使用多线程参数优化解码速度。 AVDictionary* opts NULL; //使用多线程解码 if (!av_dict_get(opts, threads, NULL, 0))     av_dict_set(opts, threads, auto, 0); 8、创建音频重采样上下文 调用 swr_alloc_set_opts() 函数可以创建一个音频重采样上下文并设置其参数。这个函数可以方便地指定输入和输出音频的通道布局、采样格式和采样率等参数。   函数原型如下 struct SwrContext *swr_alloc_set_opts(struct SwrContext *s,                                       int64_t out_ch_layout, enum AVSampleFormat out_sample_fmt, int out_sample_rate,                                       int64_t in_ch_layout, enum AVSampleFormat in_sample_fmt, int in_sample_rate,                                       int log_offset, void *log_ctx); 参数说明 - s要创建或设置参数的音频重采样上下文。如果传入非空指针则会设置现有上下文的参数如果传入空指针则会创建一个新的上下文。 - out_ch_layout输出音频的通道布局channel layout。 - out_sample_fmt输出音频的采样格式sample format。 - out_sample_rate输出音频的采样率sample rate。 - in_ch_layout输入音频的通道布局。 - in_sample_fmt输入音频的采样格式。 - in_sample_rate输入音频的采样率。 - log_offset日志输出偏移量。 - log_ctx日志上下文。 9、初始化音频重采样上下文 调用 swr_init() 函数可以初始化音频重采样上下文使其准备好进行音频重采样操作。 函数原型如下 int swr_init(struct SwrContext *s); 参数说明 - s: 要初始化的音频重采样上下文。 10、分配并初始化一个临时的帧和包 调用 av_packet_alloc() 函数可以分配一个 AVPacket 结构体并返回指向该结构体的指针。AVPacket 结构体用于存储音视频数据包括数据缓冲区、大小、时间戳等信息。 调用 av_frame_alloc() 函数可以分配一个 AVFrame 结构体并返回指向该结构体的指针。AVFrame 结构体用于存储音视频帧的数据包括像素数据、采样数据、时间戳等信息。   函数原型如下 AVPacket *av_packet_alloc(void); AVFrame *av_frame_alloc(void); 11、读取音视频源文件 调用 av_read_frame() 函数可以从输入文件或流中读取一帧音视频数据并将其存储在 AVPacket 结构体中。 函数原型如下 int av_read_frame(AVFormatContext *s, AVPacket *pkt); 参数说明 - s输入文件或流的 AVFormatContext 上下文。 - pkt存储读取到的音视频帧数据的 AVPacket 结构体。 12、发送音频数据到解码器 调用 avcodec_send_packet() 函数可以将 AVPacket 数据包发送给解码器进行解码。在发送完所有数据包后需要调用 avcodec_send_packet() 传递一个空的 AVPacket 指针以便告知解码器已经发送完所有数据。 函数原型如下 int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt); 参数说明 - avctx指向 AVCodecContext 结构体的指针表示解码器上下文。 - avpkt指向要发送给解码器的 AVPacket 数据包的指针。 13、从解码器接收解码后的音频数据 调用 avcodec_receive_frame() 函数可以从解码器中接收解码后的音视频帧数据并将其存储在 AVFrame 结构体中。 函数原型如下 int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame); 参数说明 - avctx指向 AVCodecContext 结构体的指针表示解码器上下文。 - frame用于存储接收到的解码后的 AVFrame 帧数据的结构体。   14、进行音频重采样 调用 swr_convert() 函数可以将输入缓冲区中的音频数据进行重采样并将结果存储到输出缓冲区中。 函数原型如下 int swr_convert(struct SwrContext *s, uint8_t **out, int out_count, const uint8_t **in, int in_count); 参数说明 - s指向 SwrContext 结构体的指针表示音频重采样上下文。 - out指向输出音频数据缓冲区的指针数组。 - out_count输出缓冲区中的样本数。 - in指向输入音频数据缓冲区的指针数组。 - in_count输入缓冲区中的样本数。 15、播放音频 将重采样后的数据写入声卡中进行播放。 简洁流程如下 其他重要APIvoid av_dump_format(const AVFormatContext *ic, int index,                     const char *url, int is_output); //可以将输入/输出文件的格式信息以人类可读的形式打印出来包括流的详细信息、编解码器信息等。这对于调试和了解输入/输出文件的结构和信息非常有帮助。 参数说明 - ic指向 AVFormatContext 结构体的指针表示要进行格式信息输出的输入/输出文件的 AVFormatContext。 - index如果为非负值表示要输出的流的索引如果为负值表示输出所有流信息。 - url文件的 URL 或名称在打印信息时会用到。 - is_output如果为非零值表示输出的是输出文件的格式信息如果为 0表示输出的是输入文件的格式信息。int av_samples_get_buffer_size(int *linesize, int nb_channels, int nb_samples, enum AVSampleFormat sample_fmt, int align); //计算出存储指定数量音频样本所需的缓冲区大小。这个函数通常用于动态分配音频样本数据缓冲区的场景。 参数说明 - linesize指向存储每个通道数据大小的数组的指针。 - nb_channels音频通道数。 - nb_samples每个通道中的音频样本数。 - sample_fmt音频样本格式使用 AVSampleFormat 枚举类型。 - align对齐方式通常为 0。 AVFormatContext *avformat_alloc_context(void); //用于分配内存并返回一个初始化后的 AVFormatContext 结构体指针。 AVFormatContext 结构体里面有一个重要的参数 interrupt_callback.callback 用来设置回调函数。当调用av_read_frame或avformat_find_stream_info会阻塞执行很长时间的时候只要设置该回调函数返回 1 那么就会不再阻塞立即返回。 代码例程点击跳转
http://www.dnsts.com.cn/news/59078.html

相关文章:

  • 家政服务网站做推广有效果吗国内做网站制作比较
  • 成功的网络营销案例网站搜索引擎优化诊断
  • wordpress多站点命名上海 互联网公司
  • h5手机网站建设哪家好wordpress添栏目
  • 网站怎么做404 301小型办公室装修
  • 做产地证网站怎么样宣传自己的网站
  • 微信注册网站入口湖北省建设厅网站查询
  • php网站建设培训淄博周村网站建设报价
  • 经营网站需要什么资质临安建设投标网站
  • 烟台做网站哪家好部门网站建设怎么做
  • 外贸网站设计制作优化推广wordpress自适应教程
  • 网站排名快速见效的方法wordpress淘宝网店主题
  • 运维网站制作企业做电商网站有哪些内容
  • 贵阳网站设计企业苏州园区网站建设公司
  • 设计新闻发布网站模板外贸营销推广方案
  • 怎么做高端网站wordpress吃内存
  • 网站建设公司圣辉友联网站建设安全协议
  • 阿里云建网站流程高清视频上传wordpress
  • 怎么制作网站的网页设计电子商务网站建设需要哪些工作
  • 中小企业建站服务展示网站建设
  • 东莞企业网站哪家好提供网络推广服务
  • 网站设计知名企业免费看行情的软件大全下载
  • 支付网站设计百度免费建个人网站
  • 怎么做王者荣耀网站wordpress mu 安装
  • 站长推荐自动跳转导航入口wordpress打开网站前动画
  • 设计师去哪个网站找工作空中乘务专业简历制作
  • 微模板网站建设东莞优化网站建设
  • 北京百度关键词排名seo论坛的网址
  • 网站规划 时间品牌策划公司口号
  • 网站为什么做子域名网站建设与管理期末