视频提取开发指导
场景介绍
视频提取主要工作是将多媒体文件中的音视频数据进行分离,提取出音频、视频数据源。
接口说明
接口名 | 功能描述 |
---|---|
Extractor() | 创建Extractor实例。 |
setSource(Source source) | 设置媒体播放源。 |
getStreamFormat(int id) | 获取对应索引的轨道数据的格式。 |
getTotalStreams() | 获取媒体文件中总轨道数。 |
selectStream(int id) | 根据轨道号选择媒体文件中对应的轨道。 |
unselectStream(int id) | 取消轨道选择。 |
rewindTo(long microseconds, int mode) | 根据时间和mode跳转到指定帧。 |
next() | 跳转到下一帧。 |
readBuffer(ByteBuffer buf, int offset) | 读取解复用后的数据。 |
getStreamId() | 获取当前轨道号。 |
getFrameTimestamp() | 获取当前媒体数据帧的时间戳。 |
getFrameSize() | 获取当前媒体数据帧的数据大小。 |
getFrameType() | 获取当前媒体数据帧的flags。 |
release() | 释放资源。 |
开发步骤
调用Extractor()方法创建Extractor实例。
构造数据源对象,并调用Extractor实例的setSource(Source source)方法,设置媒体源,代码示例如下:
Extractor extractor = new Extractor();File file = new File("/sdcard/test_audio.mp4"); // 根据实际情况设置文件路径FileInputStream in = new FileInputStream(file);FileDescriptor fd = in.getFD();Source source = new Source(fd);extractor.setSource(source);
调用getTotalStreams()方法获取媒体的轨道数量。
调用selectStream(int id)方法选择特定轨道的数据,进行提取。
(可选)调用unselectStream(int id)方法取消选择轨道。
(可选)调用rewindTo(long microseconds, int mode)方法实现提取过程中的跳转指定位置。
调用readBuffer(ByteBuffer buf, int offset)方法,可以实现获取提取出来的Buffer数据功能。
调用next()方法,实现提取下一帧的功能。
(可选)调用getMediaStreamId()方法,可以实现获取当前选择的轨道编号的功能。
(可选)调用getFrameTimestamp()方法,可以实现获取当前轨道内媒体数据帧时间戳的功能。
(可选)调用getFrameSize()方法,可以实现获取当前轨道的媒体数据帧大小的功能。
(可选)调用getFrameType()方法,可以实现获取当前轨道的媒体数据帧flags的功能。
提取结束后,调用release()释放资源。