当前位置: 代码迷 >> 综合 >> Android音视频开发-播放视频(使用MediaExtractor、MediaCodec、AudioTract、SurfaceView)
  详细解决方案

Android音视频开发-播放视频(使用MediaExtractor、MediaCodec、AudioTract、SurfaceView)

热度:15   发布时间:2023-12-18 02:28:56.0

看了一大堆的音视频理论知识,还是得实操一下。
这次就来实现一个播放视频的Demo吧。
使用到如下几个类:

  • MediaExtractor
    extractor意思就是提取器,功能就是提取我们所需的流(音频/视频),选取指定的track。
常用Api 功能介绍
setDataSource(String path) 设置数据的来源(文件路径or网络流的url地址)
int getTrackCount() 获取数据源中的轨道数量(音频轨道、视频轨道)
MediaFormat getTrackFormat(int index) 获取某个轨道的格式
native void selectTrack() 选定指定的轨道,多次选择只有一次生效
native int readSampleData(@NonNull ByteBuffer byteBuf, int offset); 检索当前编码样本并且把它存储到给定起始位置的字节缓冲区
public native long getSampleTime() 返回当前样本的描述时间(微秒)
public native boolean advance() 推进到下一个样本,如果没有更多样本则返回false
  • MediaCodec
    编解码器,传入指定的容器格式即可创建。
常用Api 功能介绍
static MediaCodec createDecoderByType(@NonNull String type) 实例化指定类型解码器
static MediaCodec createEncoderByType(@NonNull String type) 实例化指定类型编码器
void configure(MediaFormat format,Surface surface,MediaCrypto crypto,int flags) 配置这个编解码器,如果需要构造一个编码器则需指定flags为CONFIGURE_FLAG_ENCODE。surface:是否需要渲染,可传入null,crtpto:加密对象来保证数据解码的安全
  • MediaFormat
    媒体一些元数据信息(容器格式、采样率、声道等)
常用KEY 介绍
KEY_MIME 容器格式
KEY_SAMPLE_RATE 采样率
KEY_CHANNEL_COUNT channel数量
KEY_WIDTH 视频的width
KEY_HEIGHT 视频的height
KEY_MAX_INPUT_SIZE 数据缓冲区最大大小
KEY_BIT_RATE 比特率
  • AudioTract
    相对于MeidaPlayer更底层的音频播放器,只能播放PCM裸数据,但是更具有拓展性。
常用Api 功能介绍
AudioTrack(int streamType, int sampleRateInHz, int channelConfig, int audioFormat,int bufferSizeInBytes, int mode) 已弃用
AudioTrack(AudioAttributes attributes, AudioFormat format, int bufferSizeInBytes,int mode, int sessionId) 使用builder构造相应的属性; mode:指定播放器的模式,streamiing or static buffer;bufferSizeInBytes:缓冲池大小,建议使用AudioRecord.getMinBufferSize获取;
int write(@NonNull byte[] audioData, int offsetInBytes, int sizeInBytes) 写入数据到音频池; Streaming mode:阻塞直到完全写入,并返回一个完整的数据转移数量,否则由于线程被中断等其他原因则会返回一个较短的数据转移数量;Static buffer mode:Copy整个播放数据到音频池
  相关解决方案