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

网站建设方面书籍网站建设的基本教程

网站建设方面书籍,网站建设的基本教程,用织梦做的网站怎么上传虚拟,科技园区建设网站的意义介绍 在本系列#xff0c;我打算花大篇幅讲解我的 gitee 项目音视频播放器#xff0c;在这个项目#xff0c;您可以学到音视频解封装#xff0c;解码#xff0c;SDL渲染相关的知识。您对源代码感兴趣的话#xff0c;请查看基于FFmpeg和SDL的音视频播放器 如果您不理解本… 介绍 在本系列我打算花大篇幅讲解我的 gitee 项目音视频播放器在这个项目您可以学到音视频解封装解码SDL渲染相关的知识。您对源代码感兴趣的话请查看基于FFmpeg和SDL的音视频播放器 如果您不理解本文可参考我的前一篇文章音视频项目—基于FFmpeg和SDL的音视频播放器解析十四 解析 我们这篇文章接着解析 audiooutput 剩余的函数。 有一个很关键的函数fill_audio_pcm FILE* dump_pcm nullptr; void fill_audio_pcm(void* udata, uint8_t* stream, int len){AudioOutput* is (AudioOutput*)udata;int len1 0;int audio_size 0;if(!dump_pcm){dump_pcm fopen(dump.pcm, wb);}while (len 0){if(is-audio_buf_index is-audio_buf_size){is-audio_buf_index 0;AVFrame* frame is-frame_queue-Pop(10);if(frame){is-pts frame-pts;if(frame-format ! is-dst_tgt.fmt|| frame-sample_rate ! is-dst_tgt.freq|| frame-channel_layout ! is-dst_tgt.channel_layout !is-swr_ctx){is-swr_ctx swr_alloc_set_opts(NULL, is-dst_tgt.channel_layout,(enum AVSampleFormat)is-dst_tgt.fmt,is-dst_tgt.freq,frame-channel_layout,(enum AVSampleFormat)frame-format,frame-sample_rate,0, NULL);if(!is-swr_ctx || swr_init(is-swr_ctx) 0){swr_free((SwrContext**)(is-swr_ctx));return;}}if(is-swr_ctx){const uint8_t** in (const uint8_t**) frame-extended_data;uint8_t** out is-audio_buf1;int out_samples frame-nb_samples * is-dst_tgt.freq / frame-sample_rate 256;int out_bytes av_samples_get_buffer_size(NULL, is-dst_tgt.channels, out_samples, is-dst_tgt.fmt, 0);if(out_bytes 0){return;}av_fast_malloc(is-audio_buf1, is-audio_buf1_size, out_bytes);int len2 swr_convert(is-swr_ctx, out, out_samples, in, frame-nb_samples);if(len2 0){return;}is-audio_buf is-audio_buf1;is-audio_buf_size av_samples_get_buffer_size(NULL, is-dst_tgt.channels, len2, is-dst_tgt.fmt, 1);}else {audio_size av_samples_get_buffer_size(NULL, is-dst_tgt.channels, frame-nb_samples, (enum AVSampleFormat) frame-format, 1);av_fast_malloc(is-audio_buf1, is-audio_buf1_size, audio_size);is-audio_buf is-audio_buf1;is-audio_buf_size audio_size;memcpy(is-audio_buf, frame-data[0], audio_size);}av_frame_free(frame);}else {is-audio_buf nullptr;is-audio_buf_size 512;}}len1 is-audio_buf_size - is-audio_buf_index;if(len1 len){len1 len;}if(!is-audio_buf){memset(stream, 0, len1);}else {memcpy(stream, is-audio_buf is-audio_buf_index, len1);fwrite((uint8_t*)is-audio_buf is-audio_buf_index, 1, len1, dump_pcm);fflush(dump_pcm);}len - len1;stream len1;is-audio_buf_index len1;}if(is-pts ! AV_NOPTS_VALUE){double pts is-pts * av_q2d(is-time_base);is-avsync-SetClock(pts);} } 这个函数有将近 80 行代码负责将 pcm 数据填入音频。这个函数是用在 Init 函数上的用于给 SDL_AudioSpec 的变量的 callback 赋值。 wanted_spec.callback fill_audio_pcm; 接下来我们逐条解析这个函数。 首先看前五行代码 AudioOutput* is (AudioOutput*)udata;int len1 0;int audio_size 0;if(!dump_pcm){dump_pcm fopen(dump.pcm, wb);} 就是一些正常的赋值操作如果文件不存在则打开一个名为 “dump.pcm” 的文件设为二进制可写。 while (len 0){if(is-audio_buf_index is-audio_buf_size){is-audio_buf_index 0;AVFrame* frame is-frame_queue-Pop(10); 在长度 len 大于 0 的情况下如果两个变量相等则将 index 设置为 0取出帧队列的头部数据10 是 Pop 里的参数关于条件变量的这里不深究。 if(frame){is-pts frame-pts;if(frame-format ! is-dst_tgt.fmt|| frame-sample_rate ! is-dst_tgt.freq|| frame-channel_layout ! is-dst_tgt.channel_layout !is-swr_ctx){ 然后在帧数据存在的情况下将 pts显示时间戳赋值然后开始条件判断满足这些条件后执行。 好了这篇文章先讲 20 行代码剩余的后几篇文章再讲。 欲知后事如何请听下回分解。
http://www.huolong8.cn/news/175567/

相关文章:

  • 宁波品牌网站公司排名网站短片怎么做
  • dede网站不能运行php文件编程教育机构
  • 获取网站缩略图百度企业官网认证
  • 外贸自建站模板网站源码获取在线
  • 手机建网站优帮云网站外包
  • 有些网站为什么可以做资讯带紫色箭头做网站软件
  • 政务网站建设要求江苏建设网官方网站
  • 网站的风格指的是什么大兴做网站
  • 网站开发毕业设计任务书怎么写wordpress 数据库备份
  • 网站建设网站目的模板wordpress主题idowns下载
  • 苏州网站建设费用微信公众号商城开发
  • 惠山区住房和建设厅网站合肥建设有限公司
  • 广告做网站注入漏洞网站源码
  • 商务信息网站怎么做食品包装设计网
  • 济南高端网站建设网站建设平台接单
  • 做三网站wordpress id97
  • 网站开发现在用什么网站搭建wordpress
  • 公司网站一年多少钱室内设计学校培训的
  • 在家接做网站装修设计软件免费
  • 靖江做网站简述网站开发岗位及职务
  • 旅游网站 分析建设网站教程视频视频下载
  • 网站建设与运营合同销售管理系统有免费版
  • 大型网站域名佛山网站制作哪个好薇
  • 网站建设经费请示wordpress 用户接口
  • 怎么建立一个网站广告做网站注册会员加入实名认证功能
  • 南京免费发布信息网站房产网站排名
  • 自己建设小城市网站得多少钱宜兴开发区人才网
  • 如何给网站做301重定向怎么做可以直播的网站吗
  • 建站之家官网高端网站建设推荐万维科技
  • 高大上公司网站wordpress 弹窗插件