Вот как я решил свою проблему. Я использовал класс ImageReader как
imageReader = ImageReader.newInstance(displayWidth, displayHeight, PixelFormat.RGBA_8888, 2);
mediaProjection.createVirtualDisplay("screencapture",
displayWidth, displayHeight, density,
flags, imageReader.getSurface(), null, handler);
imageReader.setOnImageAvailableListener(new ImageAvailableListener(), null);
private class ImageAvailableListener implements ImageReader.OnImageAvailableListener {
@Override
public void onImageAvailable(ImageReader reader) {
Image image = null;
Bitmap bitmap = null;
ByteArrayOutputStream stream = null;
try {
image = imageReader.acquireLatestImage();
if (image != null) {
Image.Plane[] planes = image.getPlanes();
ByteBuffer buffer = planes[0].getBuffer();
int pixelStride = planes[0].getPixelStride();
int rowStride = planes[0].getRowStride();
int rowPadding = rowStride - pixelStride * displayWidth;
// create bitmap
bitmap = Bitmap.createBitmap(displayWidth + rowPadding/pixelStride,
displayHeight, Bitmap.Config.ARGB_8888);
bitmap.copyPixelsFromBuffer(buffer);
stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 50, stream);
StringBuilder sb = new StringBuilder();
sb.append("data:image/png;base64,");
sb.append(StringUtils.newStringUtf8(Base64.encode(stream.toByteArray(), Base64.DEFAULT)));
WebrtcClient.sendProjection(sb.toString());
}
} catch (Exception e) {
e.printStackTrace();
}
Я превращающий байты [] в Base64 строку и отправкой к через WebRTC datachannel.
Если рамки маленькие, вы можете передать их целиком. Если они нечасты, вы можете конвертировать их в JPEG или PNG. Если вы хотите, чтобы что-то приближалось к частоте обновления дисплея, вам нужно использовать видеокодер, чтобы преобразовать их в видеопоток. Ваш вопрос немного расплывчато для stackoverflow - этот сайт предназначен для конкретных вопросов программирования. – fadden
@fadden Не могли бы вы взглянуть на этот вопрос: http://stackoverflow.com/questions/31183009/use-surfacetexture-to-render-video-stream-to-android-ordinary-view-above-api-lev Мне просто нужно, чтобы вы сказали «Да» или «Нет». – dragonfly
@fadden. Я обновил вопрос. Просьба представить ваш комментарий. Если я думаю в неправильном направлении. пожалуйста, направьте меня в правильном направлении. – shubendrak