NIMSDK-AOS  9.16.0
AVChatExternalVideoCapturer.java
浏览该文件的文档.
1 /*
2  * Copyright (c) 2014-2018 NetEase, Inc.
3  * All right reserved.
4  */
5 
6 package com.netease.nimlib.sdk.avchat.video;
7 
8 import android.os.SystemClock;
9 
10 import com.netease.nimlib.log.NimLog;
13 import com.netease.nrtc.sdk.video.ExternalVideoCapturer;
14 import com.netease.nrtc.sdk.video.IVideoCapturer;
15 import com.netease.nrtc.sdk.video.VideoFrame;
16 
17 import com.netease.nrtc.utility.video.VideoUtils;
18 
19 
24 public abstract class AVChatExternalVideoCapturer extends ExternalVideoCapturer implements AVChatVideoCapturer {
25 
33  public abstract void startCapture(int width, int height, int frameRate);
34 
40  public abstract void stopCapture() throws InterruptedException;
41 
49  public abstract void changeCaptureFormat(int width, int height, int frameRate);
50 
54  public abstract void dispose();
55 
56 
57  @Override
58  public IVideoCapturer asVideoCapturer() {
59  return this;
60  }
61 
62 
68  public void onCapturerStarted(boolean success) {
69  VideoCapturerObserver observer = AVChatExternalVideoCapturer.super.getVideoCapturerObserver();
70  if (observer != null) {
71  observer.onCapturerStarted(success);
72  }
73  }
74 
75 
79  public void onCapturerStopped() {
80  VideoCapturerObserver observer = AVChatExternalVideoCapturer.super.getVideoCapturerObserver();
81  if (observer != null) {
82  observer.onCapturerStopped();
83  }
84  }
85 
86 
107  public int onByteBufferFrameCaptured(byte[] data,
108  int dataLen,
109  int width,
110  int height,
111  int rotation,
112  int frameRate,
113  int format,
114  long timeStamp,
115  boolean mirror) {
116 
117  int ret = -10;
118  VideoCapturerObserver observer = AVChatExternalVideoCapturer.super.getVideoCapturerObserver();
119 
120  if (data == null) {
121  NimLog.e("AVChatExternalVideoCapturer", "data is null");
122  return -1;
123  }
124 
125  if (data.length < dataLen || VideoUtils.calcBufferSize(format, width, height) != data.length) {
126  NimLog.e("AVChatExternalVideoCapturer", "Illegal data length!");
127  return -2;
128  }
129 
130  try {
131  VideoFrame.Buffer buffer = VideoFrame.asBuffer(data, format, width, height);
132  VideoFrame videoFrame = new VideoFrame(buffer, rotation, timeStamp);
133  if (observer != null) {
134  ret = observer.onFrameCaptured(videoFrame, frameRate, mirror);
135  }
136 
137  videoFrame.release();
138  } catch (IllegalAccessException e) {
139  NimLog.e("AVChatExternalVideoCapturer", " onByteBufferFrameCaptured " + e);
140  }
141 
142  return ret;
143  }
144 }
abstract void startCapture(int width, int height, int frameRate)
开始预览
void onCapturerStopped()
外部调用,用于通知SDK外部已经停止视频数据提交
void onCapturerStarted(boolean success)
外部调用,用于通知SDK外部是否已经成功开启视频数据提交
继承该类,实现自定义外部视频数据输入
abstract void changeCaptureFormat(int width, int height, int frameRate)
修改采集的参数
int onByteBufferFrameCaptured(byte[] data, int dataLen, int width, int height, int rotation, int frameRate, int format, long timeStamp, boolean mirror)
外部调用,用于提交每一帧视频数据