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

看了一大堆的音视频理论知识,还是得实操一下。
这次就来实现一个播放视频的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_COUNTchannel数量
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整个播放数据到音频池
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值