Flutter는 texture_rgba_renderer를 사용하여 데스크톱에서 비디오를 렌더링합니다.

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를 이용하여 영상 렌더링을 구현하는 방법은 작가가 우연히 발견한 방법입니다. 작은 비디오 이미지를 미리 보는 데 사용됩니다.

추천

출처blog.csdn.net/u013113678/article/details/132000510