andrew_video_sdk 0.0.2 copy "andrew_video_sdk: ^0.0.2" to clipboard
andrew_video_sdk: ^0.0.2 copied to clipboard

discontinued
PlatformAndroidiOS

Video editing SDK for Flutter — timeline, multi-track, transitions, effects, filters, AI subtitle, smart cut, screen recording. Layer 1 core with SPI architecture.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:andrew_video_sdk/andrew_video_sdk.dart';

/// video_sdk 最小使用示例:初始化 → 新建项目 → 预览 → 导出。
void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'Video SDK Demo',
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  const HomePage({super.key});

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  final _editor = VideoEditor();
  final _logs = <String>[];
  bool _initialized = false;
  bool _hasProject = false;
  int? _previewTextureId;

  void _log(String s) {
    setState(() {
      _logs.insert(0, '${DateTime.now().toIso8601String().substring(11, 19)}  $s');
    });
  }

  Future<void> _ensureInit() async {
    if (_initialized) return;
    _log('init editor...');
    await _editor.init(const VideoSdkConfig(
      enableGpu: true,
      enableProxy: true,
    ));
    setState(() => _initialized = true);
    _log('init done');
  }

  Future<void> _newProject() async {
    await _ensureInit();
    _log('new project...');
    _editor.projectManager.newProject(name: 'demo');
    setState(() => _hasProject = true);
    _log('project created');
  }

  Future<void> _startPreview() async {
    if (!_hasProject) {
      _log('create project first');
      return;
    }
    _log('start preview...');
    _previewTextureId = await _editor.renderEngine.createPreviewTexture();
    await _editor.renderEngine.startPreview(fps: 30, quality: 'adaptive');
    setState(() {});
    _log('previewing, textureId=$_previewTextureId');
  }

  Future<void> _export() async {
    if (!_hasProject) {
      _log('create project first');
      return;
    }
    _log('export...');
    await _editor.exportManager.export(
      const ExportConfig(
        width: 1080,
        height: 1920,
        fps: 30,
        videoBitrate: 5000,
        videoCodec: VideoCodec.h264,
        format: ExportFormat.mp4,
      ),
      onProgress: (p) => _log('export: ${(p * 100).toInt()}%'),
    );
    _log('export completed');
  }

  @override
  void dispose() {
    _editor.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Video SDK Demo')),
      body: Column(
        children: [
          Padding(
            padding: const EdgeInsets.all(8),
            child: Wrap(
              spacing: 8,
              children: [
                ElevatedButton(
                  onPressed: _newProject,
                  child: const Text('New Project'),
                ),
                ElevatedButton(
                  onPressed: _previewTextureId == null ? _startPreview : null,
                  child: const Text('Preview'),
                ),
                ElevatedButton(
                  onPressed: _hasProject ? _export : null,
                  child: const Text('Export'),
                ),
              ],
            ),
          ),
          if (_previewTextureId != null)
            SizedBox(
              height: 240,
              child: Texture(textureId: _previewTextureId!),
            ),
          const Divider(),
          Expanded(
            child: ListView.builder(
              itemCount: _logs.length,
              itemBuilder: (_, i) => ListTile(
                dense: true,
                title: Text(_logs[i], style: const TextStyle(fontSize: 12)),
              ),
            ),
          ),
        ],
      ),
    );
  }
}
1
likes
140
points
0
downloads

Documentation

Documentation
API reference

Publisher

unverified uploader

Weekly Downloads

Video editing SDK for Flutter — timeline, multi-track, transitions, effects, filters, AI subtitle, smart cut, screen recording. Layer 1 core with SPI architecture.

Repository

Topics

#video #editor #ffmpeg #ai #sdk

License

MIT (license)

Dependencies

flutter

More

Packages that depend on andrew_video_sdk

Packages that implement andrew_video_sdk