移动网站功能峰峰信息港免费发布平台

news/2025/9/28 12:22:16/文章来源:
移动网站功能,峰峰信息港免费发布平台,seo快速优化软件网站,最新的网络营销方式播放器有个功能#xff0c;当用户打开视频时#xff0c;需要读取媒体文件的总时长等信息#xff0c;不巧的时#xff0c;获取FLV时总失败#xff0c;下面来具体分析下FLV和MP4获取总时长的原因和区别#xff1a; 播放器有个获取MediaInfo的接口#xff0c;功能如下当用户打开视频时需要读取媒体文件的总时长等信息不巧的时获取FLV时总失败下面来具体分析下FLV和MP4获取总时长的原因和区别 播放器有个获取MediaInfo的接口功能如下 int MediaFFmpeg::DecoderGetMediaInfo(MediaInfo *mi,AVCodecContext *decodec_ctx,AVStream *stream){if(!mi || !stream || !decodec_ctx){return -1;}//videoif(stream-codecpar-codec_type AVMEDIA_TYPE_VIDEO){//获取视频总时长if(AV_NOPTS_VALUE ! stream-duration){mi-duration stream-duration * av_q2d(stream-time_base);std::cout video_time : (mi-duration / 3600) : (mi-duration % 3600) / 60 : (mi-duration % 60) std::endl;char formatStr[128] {0,};sprintf(formatStr, %02d:%02d:%02d,(mi-duration / 3600),((mi-duration % 3600) / 60),(mi-duration % 60));mi-durationFormatStr formatStr;}else{printf(audio duration unknown ! \n);}mi-width stream-codecpar-width;mi-height stream-codecpar-height;}//audioelse if(stream-codecpar-codec_type AVMEDIA_TYPE_AUDIO){mi-sample_fmt AV_SAMPLE_FMT_S16;mi-sample_rate decodec_ctx-sample_rate; //采样率/*48000; */mi-channels decodec_ctx-channels; //通道数/*1; */mi-nb_samples decodec_ctx-frame_size;/*1024; */mi-audio_buffer_size av_samples_get_buffer_size(NULL, mi-channels, mi-nb_samples, (enum AVSampleFormat)mi-sample_fmt, 1); //输出buff}return 0; }有经验的人可能很快就能看出来是否存在问题。 总是打印duration不合法 很奇怪的是使用av_dump_format函数可以看到Duration: Input #0, flv, from /home/zhenghui/视频/1080P.flv:Metadata:major_brand : isomminor_version : 512compatible_brands: isomiso2avc1mp41description : Packed by Bilibili XCoder v2.0.2encoder : Lavf60.3.100Duration: 00:03:46.53, start: 0.000000, bitrate: 3309 kb/sStream #0:0: Video: flv1, yuv420p, 1920x1080, 200 kb/s, 30 fps, 30 tbr, 1k tbnStream #0:1: Audio: adpcm_swf, 44100 Hz, stereo, s16, 352 kb/s就翻了翻ffmpeg的源码找到了av_dump_format的源码 void av_dump_format(AVFormatContext *ic, int index,const char *url, int is_output) {int i;uint8_t *printed ic-nb_streams ? av_mallocz(ic-nb_streams) : NULL;if (ic-nb_streams !printed)return;av_log(NULL, AV_LOG_INFO, %s #%d, %s, %s %s:\n,is_output ? Output : Input,index,is_output ? ic-oformat-name : ic-iformat-name,is_output ? to : from, url);dump_metadata(NULL, ic-metadata, );if (!is_output) {av_log(NULL, AV_LOG_INFO, Duration: );if (ic-duration ! AV_NOPTS_VALUE) {int64_t hours, mins, secs, us;int64_t duration ic-duration (ic-duration INT64_MAX - 5000 ? 5000 : 0);secs duration / AV_TIME_BASE;us duration % AV_TIME_BASE;mins secs / 60;secs % 60;hours mins / 60;mins % 60;av_log(NULL, AV_LOG_INFO, %02PRId64:%02PRId64:%02PRId64.%02PRId64, hours, mins, secs,(100 * us) / AV_TIME_BASE);} else {av_log(NULL, AV_LOG_INFO, N/A);}if (ic-start_time ! AV_NOPTS_VALUE) {int secs, us;av_log(NULL, AV_LOG_INFO, , start: );secs llabs(ic-start_time / AV_TIME_BASE);us llabs(ic-start_time % AV_TIME_BASE);av_log(NULL, AV_LOG_INFO, %s%d.%06d,ic-start_time 0 ? : -,secs,(int) av_rescale(us, 1000000, AV_TIME_BASE));}av_log(NULL, AV_LOG_INFO, , bitrate: );if (ic-bit_rate)av_log(NULL, AV_LOG_INFO, %PRId64 kb/s, ic-bit_rate / 1000);elseav_log(NULL, AV_LOG_INFO, N/A);av_log(NULL, AV_LOG_INFO, \n);}if (ic-nb_chapters)av_log(NULL, AV_LOG_INFO, Chapters:\n);for (i 0; i ic-nb_chapters; i) {const AVChapter *ch ic-chapters[i];av_log(NULL, AV_LOG_INFO, Chapter #%d:%d: , index, i);av_log(NULL, AV_LOG_INFO,start %f, , ch-start * av_q2d(ch-time_base));av_log(NULL, AV_LOG_INFO,end %f\n, ch-end * av_q2d(ch-time_base));dump_metadata(NULL, ch-metadata, );}if (ic-nb_programs) {int j, k, total 0;for (j 0; j ic-nb_programs; j) {const AVProgram *program ic-programs[j];const AVDictionaryEntry *name av_dict_get(program-metadata,name, NULL, 0);av_log(NULL, AV_LOG_INFO, Program %d %s\n, program-id,name ? name-value : );dump_metadata(NULL, program-metadata, );for (k 0; k program-nb_stream_indexes; k) {dump_stream_format(ic, program-stream_index[k],index, is_output);printed[program-stream_index[k]] 1;}total program-nb_stream_indexes;}if (total ic-nb_streams)av_log(NULL, AV_LOG_INFO, No Program\n);}for (i 0; i ic-nb_streams; i)if (!printed[i])dump_stream_format(ic, i, index, is_output);av_free(printed); } av_dump_format函数中使用的是AVFormatContext中的duration而我使用的是AVStream的duration。 Debug了一下AVFormatContext中的duration确实存在 继续跟踪到AVStream的调用位置确实不存在 最终修改如下得已解决 int MediaFFmpeg::DecoderGetMediaInfo(MediaInfo *mi,AVFormatContext *ic,AVCodecContext *decodec_ctx,AVStream *stream){if(!mi || !stream || !decodec_ctx){return -1;}//videoif(stream-codecpar-codec_type AVMEDIA_TYPE_VIDEO){//获取视频总时长if(AV_NOPTS_VALUE ! ic-duration){int64_t hours, mins, secs, us;int64_t duration ic-duration (ic-duration INT64_MAX - 5000 ? 5000 : 0);secs duration / AV_TIME_BASE;us duration % AV_TIME_BASE;mins secs / 60;secs % 60;hours mins / 60;mins % 60;mi-duration duration;char formatStr[128] {0,};sprintf(formatStr, %02ld:%02ld:%02ld,hours,mins,secs); // mi-duration ic-duration * av_q2d(stream-time_base); // std::cout video_time : // (mi-duration / 3600) : // (mi-duration % 3600) / 60 : // (mi-duration % 60) std::endl;// char formatStr[128] {0,}; // sprintf(formatStr, %02d:%02d:%02d, // (mi-duration / 3600), // ((mi-duration % 3600) / 60), // (mi-duration % 60));std::cout video_time : formatStr;mi-durationFormatStr formatStr;}else{printf(audio duration unknown ! \n);}mi-width stream-codecpar-width;mi-height stream-codecpar-height;}.........return 0; }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/920630.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

题解:[GESP202509 五级] T1

题目传送门 目前还不知道,题目还未加入洛谷题库 题目概述 T1: 给定一个数 \(n(n \le 10^5)\),你需要选出若干个在1到 \(n\) 范围内的数,使其中任意两个数互质(即两数最大公因数为1),问最多你能选几个数? 解题思…

US$39.9 Scorpio-LK Emulators SLK-06 for Tango Key Programmer

Scorpio-LK Emulators SLK-06 for Tango Key Programmer including AuthorizationSLK-06 is battery powered. Note that a battery is not included with an emulator and has to be obtained locally. Three standar…

公司做网站一般网站建设哪儿好

preareRefresh:刷新前的工作准备 obtainFreshBeanFactory:获取子类刷新后的内部beanFactory实列 prepareBeanFactory:为容器注册必要的系统级别bean postProcessBeanFactory:允许容器的子类注册postProcessor invokeBeanFacto…

OI 模板合集

输入输出优化 int 快读 int read() {int xr=0,F=1; char cr;while(cr=getchar(),cr<0||cr>9) if(cr==-) F=-1;while(cr>=0&&cr<=9)xr=(xr<<3)+(xr<<1)+(cr^48),cr=getchar();return x…

2025无人机在低空应急救援中的应用实践

2025年7月,深圳大鹏新区一名登山者跌落悬崖重伤。传统救援需数小时,但一架搭载医疗设备的无人机仅用78分钟完成伤者转运,生命体征全程平稳。这场"低空生命接力"背后,是2025年无人机在应急救援领域的全面…

本地做那种网站好一些大连网站建设 领超最好

一、简述 我们在日常处理文件时&#xff0c;经常用到os模块&#xff0c;但是有的时候你会发现&#xff0c;像拷贝、删除、打包、压缩等文件操作&#xff0c;在os模块中没有对应的函数去操作&#xff0c;下面我们就来讲讲高级的 文件、文件夹、压缩包 处理模块&#xff1a;shuti…

完整教程:默会之墙:机器人教学困境中的认知迷雾与破晓之光

完整教程:默会之墙:机器人教学困境中的认知迷雾与破晓之光2025-09-28 12:08 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !importa…

网站制作主要公司常德微网站开发

1. Activiti 5.x 提供的 activiti-explorer 账号 kermit 密码 kermit explorer 相当于 admin app。 2. Activiti 6.x 提供的 activiti-admin 账号 admin 密码 admin 修改端口&#xff0c;8080 或者 9999&#xff0c;依据自己 tomcat 的部署情况。 admin-port admin-port 可以…

实用指南:【分布式】分布式事务方案:两阶段、TCC、SEATA

实用指南:【分布式】分布式事务方案:两阶段、TCC、SEATApre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consola…

龙岗企业网站建设关键词难易度分析

观察着模式是一种行为设计模式&#xff0c;可以用来定义对象间的一对多依赖关系&#xff0c;使得每当一个对象状态发生改变时&#xff0c;其相关依赖对象皆得到通知并被自动更新。 观察者模式又叫做发布-订阅&#xff08;Publish/Subscribe&#xff09;模式、模型-视图&#xf…

清华紫光做网站个人适合网站类型

计时器机制俗称"心跳"&#xff0c;表示以特定的频率持续触发特定事件和执行特定程序的机制。在开发Windows应用商店应用的过程中&#xff0c;可以使用定义在Windows::UI::Xaml命名空间中的DispatcherTimer类来创建计时器。DispatcherTimer类包含了如下的成员&#xf…

US$37.05 YANHUA ACDP N55 Integrated Interface Board

YANHUA ACDP N55 Integrated Interface BoardDME Integrated Interface BoardFeatures: Simple operation. Plus to use it directly. Safe and reliable connetion!Package List:1pc x YANHUA ACDP N55 Integrated In…

提供零基础网站建设教学美工详情页设计一般多少钱

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用&#xff0c;支持后台一键快速安装&#xff0c;让开发者能快的实现业务功能开发。系统完全开源&#xff0c;基于 Apache 2.0 开源协议。 功能特性 丰富的模块市场&#xff0c;后台一键快速安装 会…

US$198 One Year Update Service for XTOOL X100 PAD and X100 PAD Plus

One Year Update Service for XTOOL X100 PADXTOOL X100 PAD is free update online for two years. After two years, if you still want to update it online, please pay for this one year update online service.…

Storm-0501威胁组织利用云技术实施勒索攻击的技术分析

微软威胁情报团队详细分析了Storm-0501威胁组织从传统本地勒索软件转向云勒索攻击的技术演进。文章深入剖析了攻击者如何通过权限提升、数据窃取和资源销毁等云原生技术实施勒索,并提供了全面的防护建议和检测指南。S…

模型插入 NV12 预处理节点精度问题排查流程

一、引言 在近期工具链实践过程中,频繁出现 BC 模型在插入 NV12 预处理节点后精度崩溃的现象。经分析,此类问题可分为两类:其一为用户侧 BGR/RGB 转 NV12 的代码实现缺陷;其二为 BGR/RGB 与 NV12 格式转换过程中固…

【ARM Cache与 MMU 系列文章 7 – ARMv8v9 MMU 页表配置 01 】

1.1 ARM MMU 1.1.1 虚拟地址位宽配置 64 位虚拟地址中,并不是所有位都用上,除了高 16 位用于区分内核空间和用户空间的虚拟地址外,虚拟地址的有效位的配置可以是:36, 39, 42, 47。在代码中,可以看到寄存器 TCR_EL1…

完整教程:【开题答辩过程】以《SpringMVC在筑原平面设计定制管理信息系统的应用与实践》为例,不会开题答辩的可以进来看看

完整教程:【开题答辩过程】以《SpringMVC在筑原平面设计定制管理信息系统的应用与实践》为例,不会开题答辩的可以进来看看pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !imp…

做盗版网站吗怎样进入wordpress仪表盘

仅使用numpy从头开始实现神经网络,包括反向传播公式推导过程&#xff1a; https://www.ctolib.com/yizt-numpy_neural_network.html