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

如何在android中通过编程方式捕获无音频的视频?

在Android中,可以通过编程方式捕获无音频的视频。以下是一种实现方法:

  1. 首先,需要使用Android的多媒体框架来进行视频捕获和处理。Android提供了MediaRecorder类和Camera类来实现视频录制和摄像头操作。
  2. 创建一个新的项目,并在AndroidManifest.xml文件中添加相应的权限,如摄像头权限和存储权限。
  3. 在应用程序的代码中,使用Camera类来打开摄像头,并设置摄像头参数,如分辨率、帧率等。
  4. 创建一个MediaRecorder对象,并设置视频源为摄像头,音频源为无音频,输出格式为MP4或其他支持的格式。
  5. 设置输出文件的路径和名称。
  6. 调用MediaRecorder的prepare()方法进行准备。
  7. 调用Camera的setPreviewDisplay()方法将摄像头的预览画面显示在一个SurfaceView上。
  8. 开始录制视频,调用MediaRecorder的start()方法。
  9. 当需要停止录制时,调用MediaRecorder的stop()方法,并释放资源。

下面是一个简单的示例代码:

代码语言:txt
复制
import android.hardware.Camera;
import android.media.CamcorderProfile;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;

import java.io.File;
import java.io.IOException;

public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback {

    private Camera mCamera;
    private SurfaceView mPreview;
    private MediaRecorder mMediaRecorder;
    private Button mRecordButton;
    private boolean isRecording = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mPreview = findViewById(R.id.surfaceView);
        mRecordButton = findViewById(R.id.recordButton);
        mRecordButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (isRecording) {
                    stopRecording();
                } else {
                    startRecording();
                }
            }
        });

        SurfaceHolder holder = mPreview.getHolder();
        holder.addCallback(this);
    }

    private void startRecording() {
        mCamera.unlock();
        mMediaRecorder = new MediaRecorder();
        mMediaRecorder.setCamera(mCamera);
        mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
        mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
        mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
        mMediaRecorder.setOutputFile(getOutputMediaFile().toString());

        try {
            mMediaRecorder.prepare();
            mMediaRecorder.start();
            isRecording = true;
            mRecordButton.setText("Stop");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void stopRecording() {
        mMediaRecorder.stop();
        mMediaRecorder.reset();
        mMediaRecorder.release();
        mCamera.lock();
        isRecording = false;
        mRecordButton.setText("Record");
    }

    private File getOutputMediaFile() {
        File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
                Environment.DIRECTORY_DCIM), "Camera");

        if (!mediaStorageDir.exists()) {
            if (!mediaStorageDir.mkdirs()) {
                return null;
            }
        }

        String timeStamp = String.valueOf(System.currentTimeMillis());
        return new File(mediaStorageDir.getPath() + File.separator +
                "VID_" + timeStamp + ".mp4");
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        mCamera = Camera.open();
        mCamera.setDisplayOrientation(90);
        try {
            mCamera.setPreviewDisplay(holder);
            mCamera.startPreview();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        if (holder.getSurface() == null) {
            return;
        }

        try {
            mCamera.stopPreview();
        } catch (Exception e) {
            e.printStackTrace();
        }

        try {
            mCamera.setPreviewDisplay(holder);
            mCamera.startPreview();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        mCamera.release();
    }
}

这个示例代码演示了如何在Android中通过编程方式捕获无音频的视频。它使用了Camera类来打开摄像头,并使用MediaRecorder类来设置视频源和音频源,并进行录制。同时,它还使用了SurfaceView来显示摄像头的预览画面。

在这个示例中,需要注意的是,需要在AndroidManifest.xml文件中添加相应的权限,如摄像头权限和存储权限。

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

这是腾讯云提供的移动直播解决方案,可以帮助开发者快速搭建移动直播平台,支持视频录制、推流、播放等功能。

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

相关·内容

Android平台实现系统内录(捕获播放音频)并推送RTMP服务技术方案探究

,让我们听不到手机播放音乐或者视频声音,而录制结束后会发现播放录制好文件是有这些声音。...应用可以借助此 API 复制其他应用正在播放音频。此功能类似于屏幕采集,但采集对象是音频。主要用例是视频在线播放应用,这些应用希望捕获游戏正在播放音频。...对于其音频正在被捕获应用,Capture API 不会影响该应用延迟时间。为确保安全性和隐私,“捕获播放音频”功能会施加一些限制。...捕获音频如要从其他应用捕获音频,您应用必须构建 ​​AudioRecord​​​ 对象,并向其添加 ​​AudioPlaybackCaptureConfiguration​​。...我们考虑到,在做无纸化同屏或者教育投屏时候,一般来说,主要还是采集麦克风音频为主,中间如果有视频播放或者类似需求时候,我们把内录audio打开即可(也可以做混音模式,或者推送过程,实时静音麦克风或扬声器数据源

1.6K30

视频技术开发周刊 | 245

渲染流程并实现 Demo 来向大家介绍如何在 iOS/Android 平台上手音视频开发。...Android AVDemo(3):音频封装,采集编码并封装为 M4A丨音视频工程示例 在音视频工程示例这个栏目,我们将通过拆解采集 → 编码 → 封装 → 解封装 → 解码 → 渲染流程并实现 Demo...来向大家介绍如何在 iOS/Android 平台上手音视频开发。...✦ ✦ ✦ 推荐阅读 ✦ AVOD、SVOD、TVOD、PVOD:揭秘视频点播商业模式 在本文中,我们将来了解内容提供商从VOD内容获取收益常见方式。我们还将了解每种方式优势和缺陷。...因此,当机器“看到”照片时,它必须将该照片编码为可用于执行图像分类等任务数据。当输入采用多种格式(视频音频剪辑和图像)时,此过程将变得更加复杂。

77330

WebRTC 之媒体流与轨道

当开始采集音频视频设备后就会源源不断产生媒体数据(媒体流),比如从摄像头,画布,桌面捕获视频流,从麦克风捕获音频流。只有当我们不停接收到媒体流才能看到视频和听到音乐。...在实际应用场景这些媒体流将由更多种数据组成,WebRTC 将其划分成了多个轨道,我们可以得到不同轨道对应设备信息,也可以对其进行控制,麦克风静音或网络不优秀时候关掉视频。...捕获 Video 对象播放媒体流,通过传入更大帧率得到更清晰流畅画面,也需要更高宽带支持 Canvas.captureStream fps 帧率 捕获 Canvas 媒体数据,可以动态播放画布数据...,同样传入更大帧率得到效果将更加流畅清晰 媒体流介绍: 媒体流是通过 MediaStream 接口得到后进行操作,在一个媒体流可以包含多个轨道,如同时支持视频音频后得到视频轨道和音频轨道,...媒体流有多少获取方式呢?如何得到媒体流?

1K10

说好不哭,现在就带你了解直播类音视频测试!

1.采集 音视频需要经过摄像头、麦克风上等硬件设备上通过其上传感器采集传输转化,最终成为计算机数字信号过程。其中双人视频和群视频播片,采集播放都是由ffmpeg插件完成。 ?...5.后处理 数据经过网络传输到接受方后经过解码进入后处理环节,该环节音频数据可能需要重采样或混音,而视频可能需要消除块效应、时域降频等等。 ?...进房速度 正常网络要求:进入房间耗时小于1秒(iOS和Android端) 弱网络要求:弱网络下对进房速度没有制定标准 Android建议使用中低端机型(小米note),IOS建议使用iphone6S测试...”软件,将录制视频电脑摄像头对准B; 3.点击“会声会影”软件捕获——》捕获视频——》设置“捕获文件夹”,点击捕获视频(大概录制10~20s),视频捕获完成。...机,用instrument录制CPU后使用脚本算出CPU,CPU占用率=(主进程+mediaserverd+backboard)/核数 2.Android: 通过cmd命令,进入命令行,输入adb shell

2.5K71

Android 10正式版发布,看看都有哪些新特性

有关如何在应用程序中支持这些功能详细信息,请参阅Android 10开发人员站点。...通过和第三方手机安全平台合作,我们分析师研究Gartner2019年5月手机操作系统和设备安全,一个比较Android平台报告(需要订阅),得分最高评级在26个30类别,提前在多个点从网络安全身份验证和恶意软件保护...音频播放捕获 现在,任何播放音频应用程序都可以让其他应用程序使用新音频回放捕获API捕获音频流。除了启用标题和副标题之外,该API还允许您支持流行用例,比如实时流媒体游戏。...音频视频编解码器 Android 10增加了对开源视频编解码器AV1支持,它允许媒体供应商使用更少带宽向Android设备传输高质量视频内容。...音频播放捕获:要支持字幕或游戏录制,请在应用程序启用音频回放捕捉功能——这是接触更多用户并使应用程序更易访问好方法。

1.8K20

如何用腾讯云打造一款微视频 APP

这样,后台 MySql 数据库中就只需要存储图片、音频视频等文件在腾讯云对象存储 Url ,而不必在业务侧维护其数据持久化和容量扩展,同时,内容分发和访问,也可通过腾讯云 CDN 来加速,有效降低了服务器端下载压力...当(图片、音频视频等)文件上传成功后,腾讯云会给APP端返回文件在COSUrl,此时,业务端数据库仅需存储这个Url,当用户访问该文件时,将这个Url返回给用户,然后由腾讯云COS+CDN来响应用户请求...这样,在APP端,就可以直接调用原生视频播放控件(比如AndroidVideoView或者自定义MediaPlayer),链入腾讯云COS提供Url来播放视频(当Android使用VideoView...[image.png] 如何在Web控制台对鉴黄功能进行设置? 在“图片识别”功能,可以开启鉴黄功能使用状态。...分值处于83~91之间,系统会判别为“疑似黄图”,但无法确定,需要业务端通过人工审核方式来判定是否为黄图。

4.6K10

WebRTC技术概览

WebRTC(Web Real-Time Communication)是基于标准化技术行业性项目, 旨在将实时通信功能引入到所有浏览器通过标准H5标签和Javascript API使得这些功能为...月29日(13:00-17:00) 1、现实WebRTC 如何在现实网络中进行调试,使用WireShark、浏览器工具、第三方工具来进行调试,WebRTC自带调试工具使用方法 2、通信安全 WebRTC...安全机制,新媒体加密认证代理机制,代码教学 3、实操 1、搭建7人互动直播,iOS/Android 2、网络协作demo:白板+桌面共享+web音视频 WebRTC只负责媒体,那么信令有什么作用呢...三个主要过程:获取本地媒体、建立对等连接、交换媒体或数据 WebRTC架构图 WebRTC有几个关键JavaScript API : getUserMedia(): 音频视频捕获 MediaRecorder...: 音频视频录制 RTCPeerConnection: 用户之间音频视频流 RTCDataChannel: 用户之间数据通道 重要概念: mediasession mediastream track

1.1K10

视频技术开发周刊 | 254

360度视频空间音频:它会影响视觉注意力吗? 该研究旨在了解空间音频如何影响 360° 视频视觉注意力,通过捕获隐式、显式和客观指标来评估空间音频对用户体验质量 (QoE) 影响。...Android AVDemo(12):视频解码,MP4 → H.264/H.265 → YUV 源码丨音视频工程示例 在音视频工程示例这个栏目,我们将通过拆解采集 → 编码 → 封装 → 解封装 →...解码 → 渲染流程并实现 Demo 来向大家介绍如何在 iOS/Android 平台上手音视频开发。...人工智能走到现在,我们在CV、NLP等各个领域都取得一些不错成绩,目前很多技术也落地运用到了工业,自监督监督等新方向探索也在持续。...通过这种方式,未来计算机模型就可以更好模仿人类思维,用一个有着和婴儿相同认知模型来解决问题。

97230

非线性视频编辑器MiaoVideoCut(1) --- 视频基础知识及环境搭建

视频基础知识 #编码(生产部分) 所谓视频编码方式就是指通过特定压缩技术,将某个视频格式文件转换成另一种视频格式文件方式。...#封装格式(包装部分) 封装格式(也叫容器),就是将已经编码压缩好视频轨和音频轨按照一定格式放到一个文件,也就是说,仅仅是一个外壳。...【原因:输入我们系统视频格式是各式各样mp4、mov等,我们需要将他们处理成我们自定义视频格式,再进行视频编辑处理】 2.做视频裁剪 3.做视频改分辨率、播放速度等 环境搭建 1.安装android...JNI是java调用Native语言一种特性, JNI属于java,与android直接关系 1.2实现步骤 1.在Java声明Native方法(即需要调用本地(c++)...在android studio通过NDK从而实现JNI功能 其他解释: NDK是一个工具集,允许你App使用一些底层语言代码,例如C和C++。

1.1K40

一篇文章带你了解Google CameraX

图片分析:无缝访问缓冲区图片以便在算法中使用,例如将其传递到机器学习套件。 图片拍摄:保存图片。 视频拍摄:保存视频音频。 3)确保各设备间一致性 要维持一致相机行为并非易事。...4)CameraX 视频捕获架构 捕获系统通常会录制视频流和音频流,对其进行压缩,对这两个流进行多路复用,然后将生成流写入磁盘。 图 1. 视频音频捕获系统概念图。...如图 2 所示,CameraX 视频捕获包括几个高级架构组件: SurfaceProvider,表示视频来源。 AudioSource,表示音频来源。 用于对视频/音频进行编码和压缩两个编码器。...Recorder 是与 VideoCapture 紧密耦合 VideoOutput 实现。 Recorder 用于执行视频音频捕获操作。应用通过 Recorder 创建录制对象。...最常见视频编解码器是 H.264 AVC,其容器格式为 MPEG-4。 配置和创建录制对象 应用可以通过 Recorder 创建录制对象来执行视频音频捕获操作。

3.3K31

测试人员进阶,直播类产品视频质量测试攻略分享!

视频基本原理 1.采集 音视频需要经过摄像头、麦克风上等硬件设备上通过其上传感器采集传输转化,最终成为计算机数字信号过程。其中双人视频和群视频播片,采集播放都是由ffmpeg插件完成。...4.网络传输 在网络传输,会针对不同网络环境选取UDP或TCP传输,在即时音视频通话上一般优先采用UDP,因为其可自由度、延时都较好;除外还会针对传输过程存在损耗进行处理,包括控制包大小、FEC...5.后处理 数据经过网络传输到接受方后经过解码进入后处理环节,该环节音频数据可能需要重采样或混音,而视频可能需要消除块效应、时域降频等等。...进房速度 正常网络要求:进入房间耗时小于1秒(iOS和Android端) 弱网络要求:弱网络下对进房速度没有制定标准 Android建议使用中低端机型(小米note),IOS建议使用iphone6S测试...”软件,将录制视频电脑摄像头对准B; 3.点击“会声会影”软件捕获——》捕获视频——》设置“捕获文件夹”,点击捕获视频(大概录制10~20s),视频捕获完成。

2.3K21

如何使用MediaCodec解码音视频

播放一个音视频文件时候,我们知道需要经过解协议->解封装->解码音频/视频->音频/视频同步->渲染播放这几个步骤,其中解码音频/视频是整个流程中最核心一个环节.每个步骤详细解释可以参考上篇文章Android...如何使用OpenGL播放视频 Android平台下解码音视频可以采用软件解码ffmpeg,或使用硬件解码MediaCodec来实现软件解码:利用CPU进行解码处理,这种方式会加大CPU负担并增加功耗...软硬结合,才是王道->_-> 当然,本篇文章所描述是使用硬件解码MediaCodec方式来解码一个视频文件....这里我们引入MediaExtractor,它可以分离mp4,flv生成视频h264/mpeg和音频mp3或aac(adts头) MediaExtractor用法很简单,参考官方文档举例即可 ?...,此处就不再赘述了,如果想要播放解码出来音频PCM数据,可以使用AudioTrack,详情可以参考Demo代码 当我们通过MediaCodec解码出来了音频/视频数据后,可以做一些后期处理,比如多个音频混音等

2.3K20

AirServer2023MAC电脑专用投屏软件功能介绍

可以使用 Media HD播放 HD音频,同样可以使用 Audio Fire Code或者 PNG方式进行播放。...这些视频都是通过 WAV传输,而 AirServer 7将 WAV音频发送到用户电脑上,使得用户可以同时看多个屏幕。...AirServer是一款能够通过本地网络将音频、照片、视频以及支持AirPlay功能第三方工具,从 iOS 设备无线传送到 Mac 电脑屏幕上,把Mac变成一个AirPlay终端实用工具。...图片 这款也是支持将移动设备投屏到Mac或Windows系统,画面简洁,可通过给定二维码或者投屏进行连接,操作简便。...AirServer在您环境运行,您可以使用任何设备,iPhone,iPad,Mac,Android,Nexus,Pixel,Chromebook或Windows 10 PC,将其显示屏无线屏幕镜像到大屏幕

1.4K00

AndroidQ分区存储权限变更及适配实现

权限变更 Android Q 更改了应用对设备外部存储设备文件(:/sdcard )访问方式。...2、这些文件位于以下其中一个明确定义媒体集合: 照片:存储在 MediaStore.Images 视频:存储在 MediaStore.Video 。...文件访问权限摘要 文件位置 所需权限 访问方法 卸载时是否删除文件 应用私有目录 getExternalFilesDir() 是 媒体集合(照片、视频音频) READ_EXTERNAL_STORAGE...(仅当访问其他应用文件时) MediaStore 否 下载内容(文档和电子书籍) 存储访问框架(加载系统文件选择器 否 您可以使用存储访问框架访问上表显示每个位置,而无需请求任何权限。...通过调用 ACTION_OPEN_DOCUMENT intent 能选择要打开文件, intent 会打开系统文件选择器应用。

1.5K31

Android 8.0 功能和 API(翻译自Google官网)

指针捕获Android 8.0 一项新功能,可以通过将所有鼠标事件传递到您应用中焦点视图方式提供此类控制。...从 Android 8.0 开始,您应用 View 可以请求指针捕获并定义一个侦听器来处理捕获指针事件。鼠标指针在此模式下将隐藏。如果不再需要鼠标信息,该视图可以释放指针捕获。...音频焦点增强功能 音频应用通过请求和舍弃音频焦点方式在设备上共享音频输出。应用通过启动或停止播放或者闪避音量方式处理处于聚焦状态变更。有一个新 AudioFocusRequest 类。...TS); MediaMuxer 现在可以处理任意数量音频视频流,而不再仅限于一个音频曲目和/或一个视频曲目。...安全性与隐私 权限 Android 8.0 引入了多个与电话有关新权限: ANSWER_PHONE_CALLS 允许您应用通过编程方式接听呼入电话。

2.8K30

Android SoundPool 音效播放库

通过设置maxStreams设置单个SoundPool可以播放最大音频数量。如果播放数量超过最大数量,SoundPool会根据优先级自动关闭先前播放音频。...以上信息来源于 Android-32 android\media\SoundPool.java 源码注释 总而言之就是: 使用SoundPool 可以播放多种音频,甚至可以混音播放。...从Android API 29 开始只能捕获USAGE_UNKNOWN,USAGE_MEDIA和USAGE_GAME。...系统应用程序可以捕获多种用途,辅助功能、实时字幕、用户指南等等但要遵守以下限制:1.音频不能离开设备,2.音频不能传递给第三方应用程序,3.音频不能以高于16kHz 16位单声道质量。...我们就可以进行加载音频文件了。 SoundPool通过load()方法进行加载文件。可以从assets,raw,本地磁盘等进行加载音频。 下面介绍这几种加载方式

50540

视频开发之旅(60) -调试分析FFmpeg (解封装部分)常用结构体

c) 解码(h264,mpeg2,aac,mp3) 每个AVStream存储一个视频/音频相关数据;每个AVStream对应一个AVCodecContext,存储该视频/音频流使用解码方式相关数据...;每个AVCodecContext对应一个AVCodec,包含该视频/音频对应解码器。...是解封装环节输出,同时也是解码环节输入,每个AVStream对应一个AVCodecContext,存储该视频/音频流使用解码方式相关数据;每个AVCodecContext对应一个AVCodec,...包含该视频/音频对应解码器。...结构体分析:AVPacket 四、收获 通过本篇学习实践,我们学习到了 如何在Xcode下断点调试ffmpeg并进行ffplay解封装流程分析 了解常用结构体之间关系:解协议、解封装、解码对应结构体以及之间关系

85730

AVFoundation 框架介绍

本文是 iOS/Android视频开发专题 第九篇,该专题中项目代码将在 Github 进行托管,你可在微信公众号(GeekDev)后台回复 资料 获取项目地址。...CMTimeRange 创建方式与 CMTime 类似都提供了一个 C 语言函数。...这里我们姑且抛砖引玉, 在以后文章我们将开放一款 相机 APP。 AVFoundation Capture 子系统为 iOS 视频,照片和音频捕获服务提供了通用高级体系架构。...如果你要执行以下操作,你应该使用该系统API: 构建自定义相机用户界面,将拍照或视频录制集成到应用 为用户提供对照片和视频捕获更直接控制,例如焦点,曝光等增强选项。...AVCaptureMovieFileOutput 将音频视频数据输出到文件 AVCaptureAudioFileOutput 记录音频数据输出到文件 AVCaptureMetadataOutput

3.2K10

5G Edge-XR 音频处理

基于对象音频生成 5G Edge-XR项目和其他类似技术面临最大挑战之一是,如何在保持良好广播制作流程同时,以尽可能多保存内容方式捕捉场景。...除了捕获音频内容外,还必须从场景捕获或提取描述内容大量元数据,以便在用户端实现正确且个性化渲染。考虑到此,采用基于对象音频范式能够促进最终个性化音频生成。...5G网络极大地提高了可用带宽数量,从而使将多通道未压缩音频传输到云端成为可能。 5G Edge-XR 音频系统架构 图3 所示。在活动中提取原始麦克风音源,并通过 DANTE 网络上传到云。...通过 Dante 虚拟声卡,这些音源输入到音频事件提取器和语义分析引擎。元数据流和音频混合可以通过远程 GUI 和广播混合控制台进行操作。...音频捕获 我们音频捕获和提取方法概述 图4 所示。 音频模板是基于当前背景下显著声源感知模型推导出来,而基于来自相同背景内容训练神经网络能够非常精确地实时检测和分类感兴趣音频事件。

67620

Android ExoPlayer 音画同步代码分析

一、音画同步 1.1 什么是音画同步 音画同步旨在通过时钟参考方式,将音频视频、歌词等播放时间对应起来,确保画面和声音同步。...小于 90ms 用户不能接受偏差 用户不可接受:小于-185ms & 大于 90ms 1.3 音画同步核心逻辑 主流音画同步以Audio Master 或者独立时钟方式音频保持匀速播放,通过音频播放时间进度控制视频播放方式...二、常见音同步方式 常见同步方式 【1】获取音频播放时间 ,然后将视频播放位置Seek到音频播放位置 ,然后再将音频 Seek 到视频位置。...【3】视频丢帧&视频等待对齐 这种方式一般是常见主流播放器实现方式,以音频控制时间为准,目前主流播放器MediaPlayer、ExoPlayer、iJkPlayer都是这种实现,视频快则走方案【2...在有些业务音频输出和ExoPlayer是分开,我们要考虑如何通过音频播放器去同步ExoPlayer视频渲染器,但有ExoPlayer具备高度可扩展性,我们可以通过自定时钟方式去同步ExoPlayer

84820
领券