首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么Android O上的getTrackCount(),MediaExtractor会返回0?

在Android O上,当调用getTrackCount()方法时,MediaExtractor可能会返回0的原因有以下几种可能性:

  1. 媒体文件格式不受支持:MediaExtractor只能解析支持的媒体文件格式,如果媒体文件格式不受支持,getTrackCount()方法可能会返回0。在这种情况下,您可以尝试使用支持的媒体文件格式进行测试。
  2. 媒体文件损坏或无效:如果媒体文件损坏或无效,MediaExtractor可能无法正确解析媒体文件的轨道信息,导致getTrackCount()方法返回0。您可以尝试使用其他有效的媒体文件进行测试,以确定是否是媒体文件本身的问题。
  3. 轨道信息未被正确解析:MediaExtractor负责解析媒体文件的轨道信息,包括音频轨道和视频轨道等。如果媒体文件中没有有效的轨道信息,getTrackCount()方法可能会返回0。您可以尝试使用其他包含有效轨道信息的媒体文件进行测试。
  4. API使用错误:在某些情况下,调用getTrackCount()方法之前可能需要进行一些必要的初始化操作,例如设置媒体文件路径或选择要解析的轨道类型等。如果这些操作没有正确执行,getTrackCount()方法可能会返回0。您可以查阅相关的API文档或示例代码,确保正确使用MediaExtractor的方法。

总结起来,Android O上的getTrackCount()方法返回0可能是由于媒体文件格式不受支持、媒体文件损坏或无效、轨道信息未被正确解析或API使用错误等原因导致的。为了解决这个问题,您可以尝试使用其他有效的媒体文件进行测试,确保正确执行必要的初始化操作,并查阅相关文档以了解更多关于MediaExtractor的使用方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android用MediaExtractor和MediaMuxer合成音视频

工具准备: 视频的分离合成我主要用到了MediaExtractor和MediaMuxer两个类: MediaExtractor是用于提取多路的、通常编码的视频资源的,通过它我们可以选择音频或者视频轨,...然后分别对它们进行操作等; MediaMuxer是用于复用基本流的,用它可以将音频和视频合成,目前支持输出MP4,Webm和3GP格式的视频,在Android7.0以后支持多路复用帧的MP4。...开始搞: 1.提取音视频: 我们将视频一的路径通过setDataSource方法设置给MediaExtractor对象,然后通过方法getTrackCount获取到该视频的轨道数,接着循环轨道数,此时我们可以通过...muxer.start(); //开始合成 audioVideoExtractor.selectTrack(mainAudioExtractorTrackIndex); //将提供音频的视频选择到音轨上...,类似快进 } frameVideoExtractor.selectTrack(frameExtractorTrackIndex); //将提供视频图像的视频选择到视频轨上

3.1K30
  • 使用 MediaExtractor 及 MediaCodec 解码音视频

    01 前言 大家好,本文是 iOS/Android 音视频专题 的第四篇,从本篇文章开始我们将动手编写代码。代码工程将在 Github 进行托管。...02 MediaExtractor 的基本使用 对音视频媒体文件解码时,我们首先需要分离出媒体文件的音视频轨道,MediaExtractor 就是干这个的,它可以告诉你媒体中轨道(Track)数量,并根据索引读取指定轨道数据...// 媒体文件中的轨道数量 (一般有视频,音频,字幕等) int trackCount = extractor.getTrackCount(); // mime type 指示需要分离的轨道类型 String...当请求到空闲队列后返回 ByteBuffer,将 ByteBuffer 填充数据后可调用 queueInputBuffer 加入编解码队列。...将不可用 extractor.release(); // 释放解码器 mediaCodec.release(); 完整代码详见:DemoMediaCodecActivity 05 结束语 目前,我们解码后的视频尚未渲染在屏幕上

    2.5K20

    TRTC硬编解码绿屏黑屏之编码器分辨率支持

    背景 在一些低端机型,或者定制设备上,会出现硬编硬解黑屏/绿屏,有一种情况就是因为设备自身的编解码器分辨率不支持设置的分辨率导致的,此时需要去获取下设备的支持分辨率来验证是否是该问题导致的 如何获取当前手机支持的解码最大分辨率...这是一个xml文件,可以直接看到MediaCodecs–>Decoders节点下的各个视频格式的支持情况,以**华为荣耀7x Android 8.0 **为例 image.png 获取解码视频的宽和高...MediaExtractor mediaExtractor = new MediaExtractor(); mediaExtractor.setDataSource(path);...int trackCount = mediaExtractor.getTrackCount(); for (int i = 0; i < trackCount; i++) {..."video/" :"audio/")) { return mediaExtractor.getTrackFormat(i); } } }

    99120

    Android FFmpeg + MediaCodec 实现视频硬解码

    前面 FFmpeg 系列的文章中,已经实现了音视频的播放、录制、添加滤镜等功能: Android FFmpeg 流媒体边播放边录制功能 FFmpeg 实现带滤镜的微信小视频录制功能 FFmpeg + OpenGL...MediaCodec 介绍 MediaCodec 是 Android 提供的用于对音视频进行编解码的类,它通过访问底层的 codec 来实现编解码的功能,是 Android media 基础框架的一部分...的 native 接口,Google 从 Android 5.0 开始提供,Native 代码编译时需要引入 mediandk 库,官方 demo : https://github.com/android...个字节替换为 0x00000001 得到标准的 NALU 数据,这样保证 MediaCodec 解码正确。...(m_MediaExtractor); LOGCATE("HWCodecPlayer::InitDecoder AMediaExtractor_getTrackCount %d tracks

    3.7K20

    MediaCodec进行AAC编解码(文件格式转换)

    分离轨道信息 getTrackCount()获取轨道数量 MediaFormat format = mediaExtractor.getTrackFormat(i);获取对应轨道的信息。...返回-1时代表没有更多数据了 advance 跳到下一个数据包,如果没有下一个就返回false 释放资源 使用完后调用release进行资源释放 ADTS ADTS是AAC音频文件常见的传输格式。...当你编码AAC裸流的时候,会遇到写出来的AAC文件并不能在PC和手机上播放,很大的可能就是AAC文件的每一帧里缺少了ADTS头信息文件的包装拼接。只需要加入头文件ADTS即可。...for (int i = 0; i mediaExtractor.getTrackCount(); i++) {//遍历媒体轨道 此处我们传入的是音频文件,所以也就只有一条轨道...i < encodeInputBuffers.length - 1; i++) { chunkPCM = getPCMData();//获取解码器所在线程输出的数据 代码后边会贴上

    2K50

    Android原生编解码接口 MediaCodec 之——踩坑

    = 0; 部分机型MediaCodec.configure直接crash 未设置编码强制要求的一些配置 会抛出 IllegalStateException 看这个例子stackoverflow...(path); int trackCount = mediaExtractor.getTrackCount(); for (int i = 0; i < trackCount; i++) { MediaFormat...可以通过xml查看,位置:vendor/etc/media_codecs.xml 另外,在默认情况下,如果上层没有主动设置bitrate_mode的话,返回的是VBR。...也就是默认采用VBR 关于VBR CQ CBR区别,可查看Android原生编解码接口 MediaCodec 之——完全解析中的流控。...设置了无效,还是默认值,经排查 是因为在android7.0以下,android 内部写死了参数,编码出来的只能是Baseline,除非系统改过这个BUG,否者设置无效,甚至会导致configure参数失败

    6.1K20

    使用 AudioTrack 播放音频轨道

    01 前言 大家好,本文是 iOS/Android 音视频开发专题 的第七篇,该专题中 AVPlayer 项目代码将在 Github 进行托管,你可在微信公众号(GeekDev)后台回复 资料 获取项目地址...在上篇文章 OpenGL ES 实现播放视频帧 中我们已经知道如何使用 GLSurfaceView 将解码后的视频渲染到屏幕上,但是,我们的播放器还不具备音频播放的功能,在本篇文章中我们将使用 AudioTrack...常用的采样频率有 22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz。目前在 Android 设备中,只有 44.1kHz 是所有设备都支持的采样频率。 ?...// 媒体文件中的轨道数量 (一般有视频,音频,字幕等) int trackCount = extractor.getTrackCount(); //...= null; // 记录轨道索引id,MediaExtractor 读取数据之前需要指定分离的轨道索引 int trackID = -1; for (

    2.1K31

    StageFright框架流程解读

    3、 StageFright的Decode 经过“数据流的封装”得到的两个MediaSource,事实上是两个OMXCodec。...Stagefright AV同步部分,audio全然是callback驱动数据流,video部分在onVideoEvent里会获取audio的时间戳,是传统的AV时间戳做同步。...调度器)  打开mUri所指定的文件的头部,则会依据类型选择不同的分离器(如MPEG4Extractor)  使用 MPEG4Extractor对MP4进行音视频轨道的分离,并返回MPEG4Source...类型的视频轨道给mVideoTrack  依据 mVideoTrack中的编码类型来选择解码器,avc的编码类型会选择AVCDecoder,并返回给mVideoSource,并设置mVideoSource...MediaExtractor::Create(dataSource)会依据不同的数据内容创建不同的数据读取对象。

    93520

    Android音频播放(本地网络)绘制数据波形,根据特征有节奏的改变颜色

    上一期刚刚掀完桌子没多久《Android MP3录制,波形显示,音频权限兼容与播放》,就有小伙伴问我...改变颜色和播放输出波形 Android的音频播放与录制 MediaPlayer、MediaRecord、AudioRecord,这三个都是大家耳目能详的Android多媒体类(= =没听过的也要假装听过...),包含了音视频播放,音视频录制等...但是还有一个被遗弃的熊孩子AudioTrack,这个因为太不好用了而被人过门而不入(反正肯定不是因为懒),这Android上多媒体四大家族就齐了,MediaPlayer...因为上一期的波形播放数据是short形状的,所以我们为了兼容就把数据转为short,这里要注意合成short可能有大小位的问题,然后计算音量用于提取特征值。...最后收两句: 有时候会听到有人说做业务代码只是在搬砖,对自己的技术没有什么提升,这种理论我个人并不是十分认同的,因为相对于自己开源和学习新的技术,业务代码可以让你更加严谨的对待你的代码,会遇到更多你无法回避的问题

    3.5K20

    【Android 音视频开发打怪升级:音视频硬解码篇】三、音视频播放:音视频同步

    封装Android原生提取器 之前提过,Android原生自带有一个MediaExtractor,用于音视频数据分离和提取,接来下就基于这个,做一个支持音视频提取的工具类MMExtractor: class..."video/"或者"audio/"开头的编码格式; 3)最后通过获取的索引,返回对应的音视频多媒体格式信息。...readSampleData(byteBuffer, 0) 此时,将返回读取到的音视频数据流的大小,小于0表示数据已经读完。...:距离跳播位置的最近的关键帧 到这里你就可以明白,为什么我们平时在看视频时,拖动进度条释放以后,视频通常会在你释放的位置往前一点 封装音频和视频提取器 上面封装的工具中,可以支持音频和视频的数据提取...,基本上声音都会出现异常,而画面的播放也会像倍速播放一样。

    2.4K20

    提高Android 安全性的 google 一直在努力 MediaBulethooth 贡献 90% 漏洞

    提取器移至服务器端,并放入受约束的沙箱中。Mediaserver本身仅保留了几个高级功能。 在O中,服务被“ 分散 ”,并进一步被剥夺特权,即被分离到各个沙箱中并转换成HAL。...Bound Sanitizer 数组上的内存边界检查不正确或丢失,约占Android用户空间漏洞的34%。...CFI通过保护调用的stack(例如函数指针和虚函数),使代码重用攻击更加困难。Android Q使用LLVM的影子调用栈(SCS)来保护返回地址。...XOM通过使代码不可读来防止泄漏(代码段的内存泄漏)。尝试读取仅执行代码会导致进程安全中止。...对于targetSdkVersion低于Q的应用程序,Android的进程将放宽保护,以避免潜在的应用程序损坏,但会保护64位系统进程(例如mediaextractor,init,vold等)。

    93730

    Android 实现 视频 转 字符画效果

    我们看一下实现出来的效果图: ? 效果图有点糊,原文的效果图会更好 实现的效果还是让人挺满意的。...我们下面说一下具体的实现步骤, 视频取帧 对帧图片进行字符画转换 对获取到的字符画合成视频 我们分开一步一步的讲: 视频取帧 视频取帧的整个功能最麻烦的一步,目前Android视频取帧的方法有好几种。...但主要的问题点是 MediaCodec 解码返回的帧图片数据是YUV格式的,它跟我们平时使用的 RGB 格式很不一样的是它的三个值表示的是亮度,色度,饱和度。...presentationTimeUs = -1; int outputBufferId; Image image = null; //视频定位到指定的时间的上一帧...extractor.seekTo(sec, MediaExtractor.SEEK_TO_PREVIOUS_SYNC); //因为extractor定位的帧不是准确的

    83820
    领券