AudioTrack是MediaStreamTrack的一個(gè)子類螟蝙,負(fù)責(zé)音頻的調(diào)節(jié)葡秒。
VideoTrack和Audio幾乎完全一樣斯入,只是多了一個(gè)free的方法,然后添加的Renderer的類型不一樣蕉拢。
//一個(gè)list里面存的是音頻的渲染器
private final LinkedList<AudioRenderer> renderers = new LinkedList<AudioRenderer>();
//構(gòu)造方法
public AudioTrack(long nativeTrack) {
super(nativeTrack);
}
//添加音頻渲染器特碳,與去除音頻渲染器
public void addRenderer(AudioRenderer renderer){
renderers.add(renderer);
nativeAddRenderer(nativeTrack, renderer.nativeAudioRenderer);
}
public void removeRenderer(AudioRenderer renderer){
if(!renderers.remove(renderer)){
return;
}
nativeRemoveRenderer(nativeTrack,renderer.nativeAudioRenderer);
renderer.dispose();
}
private static native void nativeAddRenderer(long nativeTrack, long nativeRenderer);
private static native void nativeRemoveRenderer(long nativeTrack, long nativeRenderer);
//釋放掉AudioTrack
public void dispose(){
while (!renderers.isEmpty()) {
removeRenderer(renderers.getFirst());
}
super.dispose();
}
//方法含義同AudioTrack
private final LinkedList<VideoRenderer> renderers = new LinkedList<VideoRenderer>();
public VideoTrack(long nativeTrack) {
super(nativeTrack);
}
public void addRenderer(VideoRenderer renderer) {
renderers.add(renderer);
nativeAddRenderer(nativeTrack, renderer.nativeVideoRenderer);
}
public void removeRenderer(VideoRenderer renderer) {
if (!renderers.remove(renderer)) {
return;
}
nativeRemoveRenderer(nativeTrack, renderer.nativeVideoRenderer);
renderer.dispose();
}
public void dispose() {
while (!renderers.isEmpty()) {
removeRenderer(renderers.getFirst());
}
super.dispose();
}
private static native void free(long nativeTrack);
private static native void nativeAddRenderer(long nativeTrack, long nativeRenderer);
private static native void nativeRemoveRenderer(long nativeTrack, long nativeRenderer);