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

想要在logcat中获取当前视频时长。使用exoplayer

ExoPlayer是一个功能强大的开源媒体播放器库,可用于在Android应用程序中播放音频和视频。要在logcat中获取当前视频时长,可以通过以下步骤实现:

  1. 首先,确保你已经在你的Android项目中集成了ExoPlayer库。你可以在官方文档中找到集成ExoPlayer的详细步骤。
  2. 在你的代码中,创建一个ExoPlayer实例并设置相关的监听器。你可以使用ExoPlayer的addListener()方法添加一个Player.EventListener监听器。
  3. Player.EventListener监听器中,你可以重写onPlayerStateChanged()方法,该方法会在播放器状态发生变化时被调用。你可以在该方法中获取当前视频的时长。

下面是一个示例代码:

代码语言:java
复制
// 创建ExoPlayer实例
SimpleExoPlayer player = new SimpleExoPlayer.Builder(context).build();

// 添加Player.EventListener监听器
player.addListener(new Player.EventListener() {
    @Override
    public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
        if (playbackState == Player.STATE_READY) {
            // 获取当前视频时长
            long duration = player.getDuration();
            Log.d("VideoDuration", "Current video duration: " + duration);
        }
    }
});

// 准备播放器
player.prepare(mediaSource);

// 开始播放
player.setPlayWhenReady(true);

在上述代码中,我们创建了一个SimpleExoPlayer实例,并添加了一个Player.EventListener监听器。在onPlayerStateChanged()方法中,我们检查播放器状态是否为STATE_READY,如果是,就可以通过player.getDuration()方法获取当前视频的时长,并在logcat中打印出来。

需要注意的是,上述代码只是一个简单示例,你需要根据你的具体项目需求进行适当的修改和调整。

推荐的腾讯云相关产品:腾讯云移动直播(https://cloud.tencent.com/product/mlvb

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

相关·内容

看点视频秒开优化:解码器复用优化方案篇

随着短视频的流行,用户在碎片化场景下消费的视频内容越来越多。短视频本身时长较短,首帧体验尤为重要。随着预加载、预下载、IP直通车等传统优化手段使用,首帧体验有了明显提升。...以ExoPlayer文章数据为例,播放器在数据准备好后还有一段耗时不容忽略,其中 Galaxy S8播放1080p的H.264视频,音视频解码器初始化总和耗时高达170ms,占启动总耗时的60%(170ms...总而言之,基于短视频切换频繁的特点,直接使用ExoPlayer方案会存在以下困难: 无法在player之间复用,由于有预加载等优化手段,短视频场景一般不同视频对应不同的player,与方案冲突。...即需要复用时,会获取ReuseCodecWrapper进行是使用,其中的初始化逻辑是不耗时的,非复用时会直接使用DirectCodecWrapper,里面直接进行了系统MediaCodec的API代理。...2.6.2 如何接入 其他播放器接入:如果没有使用台播放器,我们也可以支持其他播放器的接入。

5.8K126

Android FFmpeg系列07--音画同步

Demo中一直使用的oceans.mp4可能不是很容易区分音画不同步问题,除非是真的特别严重的时候,在网上找了一个可以用来测试音画是否同步的视频,也上传到工程的assets目录中了,感兴趣的小伙伴可以自己在...视觉和听觉可以分辨的差异标准可以参考ITU-R BT.1359标准 从上图可以看到,我们并不是真的需要音频、视频帧的时间严格匹配,只需要在合理的区间内相互追赶就行,所以说音视频的同步是动态的、是暂时的...为例 一个视频帧的播放时长为1000ms / 25 = 40ms,一个AAC音频帧的播放时长为1024 / 44100 * 1000ms ≈ 23.22ms,理想情况下音视频完全同步,播放过程如下:...pts; 解码播放时,根据音频、视频时间戳及参考时钟来调整播放(如果数据帧的pts大于当前参考时钟上的时间,则sleep直到参考时钟到达数据帧的时间;如果数据帧的pts小于当前参考时钟上的时间,则尽快消费数据或者直接丢弃数据...ffplay,exoplayer都是如此 音画同步的关键在于计算视频和音频时间的diff和计算最终的delay,在ffplay.c源码通过如下函数计算 static double compute_target_delay

1.5K40
  • ExoPlayer漫谈之解码器复用

    enabled状态, 在此状态下,渲染器可以播放媒体流,并在可能的情况下(例如,在读取流的格式之后)获取解码器实例。 started状态, 在此状态下,渲染器使用持有的解码器实例来播放视频 ?...在2.10之前的版本,只要视频渲染器保持在启用和启动状态,ExoPlayer就会尽可能重复使用视频解码器。特别是,这意味着从播放列表的一种媒体过渡到另一种媒体时,视频解码器将被重用。...在渲染列表过渡到禁用状态时,音频解码器不会在此类播放列表过渡重用,视频或音频解码器也不会重用。...一句话, 复用codec实例,不能调用stop方法,不能将codec置为disabled状态 ExoPlayer 2.10版本之后的codec复用 2.10版本可以保证在播放新的视频源的时候复用播放器解码器资源...,例如短视频信息流都是H264/AAC编码格式 如果使用ExoPlayer播放器,最好使用同一个ExoPlayer实例,因为codec实例是封装在ExoPlayer实例的 当重新prepare新的视频

    2.2K31

    ExoPlayer 漫谈之解码器复用

    只要视频渲染器保持在启用和启动状态,ExoPlayer就会尽可能重复使用视频解码器。...特别是,这意味着从播放列表的一种媒体过渡到另一种媒体时,视频解码器将被重用。在渲染列表过渡到禁用状态时,音频解码器不会在此类播放列表过渡重用,视频或音频解码器也不会重用。...一句话, 复用codec实例,不能调用stop方法,不能将codec置为disabled状态 ExoPlayer 2.10版本之后的codec复用 2.10版本可以保证在播放新的视频源的时候复用播放器解码器资源...REUSE_RESULT_NO : evaluation.result, discardReasons); } 首先当前视频的最大分辨率不能超过codec支持的最大解码分辨率 其次视频的输入...,例如短视频信息流都是H264/AAC编码格式 如果使用ExoPlayer播放器,最好使用同一个ExoPlayer实例,因为codec实例是封装在ExoPlayer实例的 当重新prepare新的视频

    2.6K60

    ExoPlayer 多路流切换

    好处是能避免很多问题,但问题也是显而易见的,第一就是就是需要在某些业务,保留重启前的一些状态,在Seek完成之后再恢复回来。...对于常见的Mp4而言,一般来说既包括音频轨道,又包括视频轨道,在解封装之后,一路进入音频渲染器,一路进入视频渲染器,属于典型的两路流。...for (int trackIndex = 0; trackIndex < group.length; trackIndex++) { //获取一种匹配的视频...i轨道正在使用的渲染器,注意这里是可以渲染 rendererWasEnabledFlags[i] = isRendererEnabled(renderer); //获取第...对齐过程ExoPlayer只要存在音频渲染器,那么音画同步的时间以音频为准。 对齐过程,如果缺少音频,那么音画同步以独立时钟为主。

    1.1K31

    Android ExoPlayer 音画同步代码分析

    ExoPlayer com.google.android.exoplayer2.audio.BaseRenderer#getMediaClock 方法是空实现,但是在子类中视频依然返回 null...播放进度重要组件,核心逻辑只有两个,一个是调节播放倍速,另一个是获取播放时间。...如果 earlyUs 时间差为正值,代表视频帧应该在当前系统时间之后被显示,换言之,代表视频帧来早了,反之,如果时间差为负值,代表视频帧应该在当前系统时间之前被显示,换言之,代表视频帧来晚了。...4.4版本ExoPlayer内部逻辑显然期待以10ms的频率进行同步,否则直接送显。...在有些业务的音频输出和ExoPlayer是分开的,我们要考虑如何通过音频播放器去同步ExoPlayer视频渲染器,但有ExoPlayer具备高度的可扩展性,我们可以通过自定时钟的方式去同步ExoPlayer

    1.3K20

    01.视频播放器框架介绍

    要是兼容内核切换,就必须自己制定一个视频接口+实现类的播放器 播放器内核和UI层耦合 也就是说视频player和ui操作柔和到了一起,尤其是两者之间的交互。...也就是适合大多数业务场景 视频分层 播放器内核 可以切换ExoPlayer、MediaPlayer,IjkPlayer,声网视频播放器,这里使用工厂模式Factory + AbstractVideoPlayer...(controller); //设置视频播放链接地址 mVideoPlayer.setUrl(url); //开始播放 mVideoPlayer.start(); 4.4 注意问题 如果是全屏播放,则需要在清单文件设置当前...9.1 如何兼容不同内核播放器 提问:针对不同内核播放器,比如谷歌的ExoPlayer,B站的IjkPlayer,还有原生的MediaPlayer,有些api不一样,那使用的时候如何统一api呢?...现在我们要在中间加一层本地代理,播放器播放的时候(获取数据)是通过我们的本地代理的地址来播放的,这样我们就可以很好的在中间层(本地代理层)做一些处理,比如:文件缓存,预缓存(秒开处理),监控等。

    2.6K51

    视频开发之旅(45)-ExoPlayer 音频播放器实践(一)

    要在Android实现这一设计,您可以使用两个组件构建一个音频应用程序: activity(展示所用) 和播放器service。如果用户切换到另一个应用程序,则该service可以在后台运行。...Service的连接状态以及获取在Service异步获取的音乐数据(这个一般不在Service中进行获取,因为涉及到的是具体的业务逻辑) MediaBrowserService 是一个Service,...onLoadChildren回调在Sercive异步获取的数据给到MediaBrowser。...onConnectionFailed() { super.onConnectionFailed(); } } 2.3 基本功能 歌曲播放播放暂停 当用户点击了播放/暂停按钮后,获取当前的播放状态...Activity直接和Service通过MediaSession框架的各种回调进行通信,播放器ExoPlayer封装在Service内,数据的获取也在Service

    5.2K00

    Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

    获取VLC源代码从VLC的官方Git仓库获取源代码。...你可以将FFmpeg与ExoPlayer结合使用,通过FFmpeg来解码RTSP流,并将解码后的数据传递给ExoPlayer进行播放。...这个MediaSource将负责使用FFmpeg来拉取和解码RTSP流,并将解码后的数据(通常是PCM音频和YUV或RGB视频帧)传递给ExoPlayer的渲染器。...,实时静音/取消静音; [实时音量调节]支持播放过程实时调节音量; [实时快照]支持播放过程截取当前播放画面; [只播关键帧]Windows平台支持实时设置是否只播放关键帧; [渲染角度]支持0°,.../PCMA/PCMU数据回调; [音视频自适应]支持播放过程,音视频信息改变后自适应; [扩展录像功能]完美支持和录像SDK组合使用

    19410

    YouTube开源播放器中文使用指南

    对于自定义播放器非常友好,里面将很多模块抽象成独立的组件可供使用者自行定制,当然官方也提供了一些默认的实现。如果你正在开发视频类功能,强烈推荐你尝试一下ExoPlayer。...可以根据用户的需求方便的对播放器行为进行定制和扩展,ExoPlayer的很多组件都支持自定义和扩展。 支持播放视频列表,并且可以支持对视频的裁剪、合并,以及循环播放设置。...() } 在app module的build.gradle添加对ExoPlayer的依赖: implementation 'com.google.android.exoplayer:exoplayer...另外需要注意的是,在所有有依赖ExoPlayer库的模块中都需要打开对Java8的支持,需要在模块的build.gradle添加如下代码: compileOptions { targetCompatibility...既然是Yutube使用的播放器,如何强大读者自行去挖掘,也可挖掘源码的设计架构。

    3.9K20

    ExoPlayer 自适应流切换分析

    一、前言 自适应流切换属于多路流切换的方式的一种,ExoPlayer作为MediaCodec使用的集大成者,不仅具备通过MergingMediaSource实现不同流的组合切换,同样也具备基于MGEG-DASH...在ExoPlayer,MergingMediaSource 的同一类型(视频类型、音频类型、字幕类型等)的数据,由于缺乏必要的码率参数, 无法将相似Format的Track数据合并为一组,因此使用的...mimeType : 资源类型 codecs: 资源编码类型 width: 视频宽度 height: 视频高度 和其他协议的资源不同的是,由于使用清单文件的原因,基本可以实现在解封装之前就能获取到必要的...答案是否定的,因为MergingMediaSource合并的是完整的资源,在使用过程并不会调用TrackSelection相关方法,当然ExoPlayer也没有实现资源的动态分片。...核心点determineIdealSelectedIndex,这里的逻辑就是获取当前带宽,然后匹配Selection的采样队列 private int determineIdealSelectedIndex

    1.4K30

    05.视频播放器内核切换封装

    07.看一下工厂类实现代码 08.后期如何添加新的内核 00.视频播放器通用框架 基础封装视频播放器player,可以在ExoPlayer、MediaPlayer,声网RTC视频播放器内核,原生MediaPlayer...比如需要支持播放器UI高度定制,而不是该lib库UI代码 针对视频播放,音频播放,播放回放,以及视频直播的功能。...long getCurrentPosition() { return mMediaPlayer.getCurrentPosition(); } /** * 获取视频时长...return 0; } return mInternalPlayer.getCurrentPosition(); } /** * 获取视频时长...如何使用,分为三步,具体操作如下所示 1.先调用具体工厂对象的方法createPlayer方法;2.根据传入产品类型参数获得具体的产品对象;3.返回产品对象并使用

    2.2K20

    播放视频时如何调整音频的音量

    文章的标题已经表明了,我提一个简单的问题,播放视频的时候我觉得视频的声音太大或者太小了,我调整一下声音,怎么办? 我大多数同学想笑了,这是一个问题吗?...例如我们使用开源的ExoPlayer播放器,我们实现这个功能(当然原生的肯定是没有提供这个功能的)。...我们需要在解码出音频数据之后,操作解码之后的音频帧数据,调整振幅,然后将得到的数据输出,渲染播放即可满足要求。...< -32767) { value = -32767; } samples[xSample] = (short)value; } } 但是日常生活我们衡量声音大小使用...平均分贝:计算音频的每一帧数据的分贝,输出平均分贝 标准分贝:当前情况下多少分贝是最合适的分贝 平均分贝我播放器肯定是无法获知的,视频没有播放完成,我们无法获知,但是服务器知道,可以传到客户端,那么分贝这振幅系数之间如何换算

    2K20

    ExoPlayer播放音视频使用介绍

    ExoPlayer是一款开源的应用级媒体播放器,基于Android的低级媒体API构建。本指南描述了ExoPlayer库及其使用。它是指ExoPlayer的主要演示应用程序的代码,以提供具体的示例。...因为ExoPlayer是一个包含在应用程序apk的库,所以您可以控制使用哪个版本,并且可以轻松地将其更新为新版本,作为常规应用程序更新的一部分。...可以使用setTextOutput和setId3Output在播放过程接收字幕和ID3元数据输出。 (4)准备播放器 在ExoPlayer,每个media都由MediaSource表示。...五、媒体资源(MediaSource)的使用ExoPlayer,每个media都由 MediaSource 表示。...(1)从侧面加载字幕文件 给定一个视频文件和一个单独的字幕文件,可以使用 MergingMediaSource 将它们合并到单个播放源

    6.3K20

    可折叠设备的桌面模式

    展开您的视频播放体验 可折叠设备向用户们提供了使用他们的手机做更多事情的可能性,包括*桌面模式**等创新,也就是当手机平放时,铰链处于水平位置,同时折叠屏幕处于部分打开的状态。...当您不想将手机握在手里使用时,桌面模式非常方便。它很适合于看媒体、进行视频通话、拍照甚至是玩游戏。...前期准备 示例应用使用Exoplayer,这是 Android 平台上非常流行的开源媒体播放库。...每当您获取到新的布局信息时,您可以查询显示屏特征,并检查设备当前显示是否存在折叠或铰链: private fun onLayoutInfoChanged(newLayoutInfo: WindowLayoutInfo...更多资源 Exoplayer Codelab: 用 Exoplayer 播放视频流 桌面模式实例应用 为可折叠设备而设计 为可折叠设备构建应用 Jetpack WindowManager 使用 MotionLayout

    2.4K30

    Retrofit实现带进度下载

    最近项目中遇到了下载视频和图片文件的需求(还有上传视频和图片的需求,我会在下篇博客中讲解),我第一反应是用retrofit做呀,so easy!产品接着说,要带下载进度条哦!...我一,retrofit好像并没有给我们提供显示下载进度的接口,哎呀,看来还是得自己个儿整整喽!接下来,我把自己实现Retrofit带进度下载文件的流程分享给大家。...效果图 在demo我分别实现了视频和图片的下载,并附带有下载进度显示,视频下载完成后运用exo播放器直接播放的,图片只是用Glide简单展示了一下。好了,我们步入正题吧!...六、最后来看看使用 private void downloadPicture() { mDownloadUtil = new DownloadUtil(); mDownloadUtil.downloadFile...因为对UI的处理需要在UI线程中进行,所以这些处理需要通过runOnUiThread切换线程! 到这里整个下载过程就结束了,是不是很简单呀!

    1.1K20

    视频开发之旅(44)-ExoPlayer介绍及简单使用

    从这篇开始我们进入阶段五 —— 一些音视频开源项目的学习使用分析,今天我们进入ExoPlayer部分的学习实践 一、ExoPlayer基本介绍 1.1 ExoPlayer优缺点 ExoPlayer是谷歌开源的一个应用级的音视频播放器...在我们的日常项目开发,开发一个组件 从易用性和以扩展性方面考虑,既要保证使用者很容易上手使用(提供一套默认实现),又要有方便使用者根据自己的场景进行方便的扩展的能力。...STATE_ENDED: 播放完了所有的资源后处于改状态 二、ExoPlayer的简单使用 这一小节我们学习实践ExoPlayer使用 2.1 AS引入library ExoPlayer有很好的扩展性和可定制性...player.prepare() printCurPlaybackState("prepare") // 此时处于 STATE_BUFFERING = 2; 2.3 播放监听 当前是否在播放...通过这个崩溃堆栈,我们可以看到ExoPlayer加载网络视频使用的是Okhttp 问题3 2021-05-15 18:41:17.414 11144-11144/?

    7.5K00

    Android主流播放器比较

    VideoView 的使用非常简单,播放视频的步骤: 在界面布局文件定义 VideoView 组件,或在程序创建 VideoView 组件 调用 VideoView 的如下两个方法来加载指定的视频:...ExoPlayer ExoPlayer 开源项目包含了 library 和 示例: ExoPlayer library - 这部分是核心的库 Demo app - 这部分是演示怎么使用 ExoPlayer...比如如何获取媒体数据,如何缓冲以及是怎样的编码格式。 ExoPlayer 基于 MediaCodec 和 AudioTrack 提供了默认的音视频的 TrackRenderer 实现。...因为 ExoPlayer 是一个包含在你的应用的库,对于你使用哪个版本有完全的控制权,并且你可以简单的跟随应用的升级而升级; 更少的适配性问题。...优点: 强大,支持超多格式视频和网络视频播放。 使用简单。调用非常简单,方便使用。 IjkPlayer 优点: ijkplayer 最大的优点就是可以根据需要编译需要的解码器。

    2.9K20

    AndroidADB命令用法大结局

    displays 查看UI绘制的各个层级信息 adb shell dumpsys SurfaceFlinger 7、显示wifi信息 adb shell dumpsys wifi 8、电量信息及CPU 使用时长...input tap x y 21、发送按键 adb shell input keyevent 82(keycode) 22、输入文本 adb shell input text XXXX 23、查看报名包含...adb shell procrank 37、查看指定进程状态 adb shell ps -x [PID] 38、查看后台services信息 adb shell service list 39、查看当前内存占用...--time-limit 10 /sdcard/demo.mp4 指定视频分辨率大小: adb shell screenrecord --size 1280*720 /sdcard/demo.mp4 指定视频的比特率...thread 输出格式 adb logcat -v thread (4)Android日志系统为日志消息保持了多个循环缓冲区,而且不是所有的消息都被发送到默认缓冲区,要想查看这些附加的缓冲区,可以使用

    1.2K31

    4款知名播放器比较:ijkPlayer、VLC、SmartPlayer、ExoPlayer

    ,集成也较为简单,使用也和MediaPlayer差不多,但是要定制化需求,就有一定的门槛高度。...支持播放过程,实时静音/取消静音; [实时音量调节]支持播放过程实时调节音量; [实时快照]支持播放过程截取当前播放画面; [只播关键帧]Windows平台支持实时设置是否只播放关键帧;...); [实时下载速度更新]支持当前下载速度实时回调(支持设置回调时间间隔); [解码前视频数据回调]支持H.264/H.265数据回调; [解码后视频数据回调]支持解码后YUV/RGB数据回调;...[解码前音频数据回调]支持AAC/PCMA/PCMU数据回调; [音视频自适应]支持播放过程,音视频信息改变后自适应; [扩展录像功能]支持和录像SDK组合使用。...ExoPlayer ExoPlayer 是google推出的开源播放器,主要是集成了Android 提供的一套解码系统来解析视频和音频,将MediaCodec封装地非常完善,形成了一个性能优越,播放稳定性较好的一个开发播放器

    7.9K70
    领券