Flutter 비디오 렌더링 시리즈
1장 Android는 텍스처를 사용하여 비디오 렌더링
2장 Windows는 텍스처를 사용하여 비디오 렌더링
3장 Linux는 텍스처를 사용하여 비디오 렌더링
4장 전체 플랫폼 FFI+CustomPainter를 사용하여 비디오 렌더링
5장 Windows는 기본 창을 사용하여 비디오 렌더링 6
장 데스크톱은 texture_rgba_renderer 비디오 렌더링 (이 장)
기사 디렉토리
머리말
이전 장에서는 Flutter가 텍스처를 사용하여 동영상을 렌더링하는 방법을 소개했지만 각 플랫폼에서 텍스처를 생성하기 위해 네이티브 코드 세트를 작성해야 하므로 코드 유지 관리에 도움이 되지 않는 문제가 있습니다. 가장 좋은 방법은 모든 플랫폼에서 실행할 수 있는 일련의 코드여야 합니다.. rgba 렌더링을 위해 텍스처를 호출하는 dart 코드를 직접 제공하는 pub에서 텍스처를 캡슐화하는 플러그인을 최근에 발견했습니다.물론 데스크탑 만 지원합니다. 즉, Windows와 Linux, Macos이지만 여전히 매우 편리합니다.
1. 달성 방법
1. 플러그인 추가
플러그인의 주소는 https://pub-web.flutter-io.cn/packages/texture_rgba_renderer 입니다 . pubspec.yaml에서 직접 의존성을 추가할 수 있습니다.
의존하다
texture_rgba_renderer: ^0.0.16
인용하다
import 'package:texture_rgba_renderer/texture_rgba_renderer.dart';
2. 질감 만들기
전역 플러그인 개체 정의
final _textureRgbaRendererPlugin = TextureRgbaRenderer();
텍스처 생성 및 textureId 가져오기
//textureId,使用ValueNotifier方便刷新界面
ValueNotifier<int> _textureId = ValueNotifier<int>(-1);
//参数为唯一标识符,使用当前对象this的hashCode。
_textureId.value = await _textureRgbaRendererPlugin.createTexture(hashCode);
3. 텍스처 컨트롤 연결
//ValueListenableBuilder与ValueNotifier是配套使用的,方便界面刷新。
ValueListenableBuilder(
valueListenable: _textureId,
builder: (c, v, w) {
//关联textureId
return Texture(textureId: _textureId.value);
})),
4. bgra에 쓰기
데이터 형식은 ffmpeg의 AV_PIX_FMT_BGRA입니다.
//数据地址
int adress = msg[2];
//一行数据长度
int linesize = msg[3];
int width = msg[4];
int height = msg[5];
//将bgra数据写入texture
final ptr = await _textureRgbaRendererPlugin.getTexturePtr(hashCode);
Native.instance.onRgba(
Pointer.fromAddress(ptr),
Pointer.fromAddress(adress),
height* linesize,
width,
height,
linesize);
2. 효과 미리보기
기본적인 달리기 효과
3. 문제 분석
texture_rgba_renderer: 0.0.16, 현재 버전에 관한 한 CPU 소비는 기본 텍스처 작성보다 훨씬 높습니다 . 주된 이유는 dart가 bgra 데이터를 쓸 때 플러그인의 맨 아래 계층이 먼저 데이터를 한 번 복사한 다음 데이터에 대해 두 번째 라인별 스캔을 수행 하고 새 버퍼 정렬 데이터에 복사하기 때문입니다. 작업, 특히 프로그레시브 스캔 복사에서 더 많은 CPU를 사용합니다.
4. 완전한 코드
https://download.csdn.net/download/u013113678/88124430
샘플 코드에는 Windows 및 Linux 용 비디오 렌더링만 있습니다 .
참고: texture_rgba_renderer: 0.0.16의 성능은 특별히 좋지 않습니다. 필요에 따라 다운로드하십시오.
요약하다
위 내용은 오늘 이야기 하고자 하는 내용인데요 texture_rgba_renderer를 이용하여 영상 렌더링을 구현하는 방법은 작가가 우연히 발견한 방법입니다. 작은 비디오 이미지를 미리 보는 데 사용됩니다.