首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将文本和图像叠加到来自Flutter应用程序的YouTube实时流

将文本和图像叠加到来自Flutter应用程序的YouTube实时流
EN

Stack Overflow用户
提问于 2020-05-22 07:36:14
回答 2查看 2.4K关注 0票数 4

我正在考虑创建一个Flutter移动应用程序,使用YouTube Live Streaming API将流直播到YouTube。我检查了API,发现它不提供将文本和图像覆盖到实况流上的方法。我如何使用Flutter来实现这一点?

我想这涉及到使用Stack小部件在用户的视频提要上覆盖内容。但是,这可能需要以某种方式编码到要发送到YouTube的视频流中。

EN

回答 2

Stack Overflow用户

发布于 2020-05-26 11:20:14

这种类型的工作通常是使用FFmpeg完成的。有关更多信息,请参阅此讨论:https://video.stackexchange.com/questions/12105/add-an-image-overlay-in-front-of-video-using-ffmpeg

用于移动设备的FFmpeg由以下项目提供:https://github.com/tanersener/mobile-ffmpeg

然后,像往常一样,我们有一个名为flutter_ffmpeg的flutter包,允许我们在flutter https://pub.dev/packages/flutter_ffmpeg上使用这些功能

票数 0
EN

Stack Overflow用户

发布于 2020-06-11 15:31:26

TLDR:你可以在Flutter中使用CameraController (相机包)和Canvas来绘制文本。不幸的是,API docs中没有记录CameraController.startImageStream,它是一个1 year+的GitHub issue

每次摄像头插件给你一个视频帧controller.startImageStream((CameraImage img) { /* your code */},你就可以将图像绘制到画布上,绘制文本,捕获视频,并调用YouTube接口。您可以在此issue上查看Tensorflow Lite包here中使用视频缓冲区的示例或阅读更多信息。

在相同的画布上,您可以绘制任何您想要的内容,如drawArcdrawParagraphdrawPoints。它为您提供了终极的灵活性。

下面是捕获画布内容的一个简单示例,我之前在状态中保存了笔划。(您应该使用有关文本的详细信息,并从相机中提取最新的帧。):

代码语言:javascript
复制
Future<img.Image> getDrawnImage() async {
  ui.PictureRecorder recorder = ui.PictureRecorder();
  Canvas canvas = Canvas(recorder);
  canvas.drawColor(Colors.white, BlendMode.src);
  StrokesPainter painter = StrokesPainter(
      strokes: InheritedStrokesHistory.of(context).strokes);
  painter.paint(canvas, deviceData.size);
  ui.Image screenImage = await (recorder.endRecording().toImage(
      deviceData.size.width.floor(), deviceData.size.height.floor()));

  ByteData imgBytes =
      await screenImage.toByteData(format: ui.ImageByteFormat.rawRgba);
  return img.Image.fromBytes(deviceData.size.width.floor(),
      deviceData.size.height.floor(), imgBytes.buffer.asUint8List());
}

我打算添加一个链接到我制作的一个app,它允许您在手机图库中绘制和截图(但也使用Tensorflow Lite),但代码有点复杂。最好的方法可能是克隆它,看看如果您在捕获画布时遇到困难,它会做什么。

我最初找不到startImageStream上的文档,忘记了我曾在Tensorflow Lite上使用过它,并建议使用MethodChannel.invokeMethod并编写特定于iOS/ Android的代码。如果你在Flutter中发现了任何限制,请记住这一点,尽管我不认为Flutter会在这个问题上限制你。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61945506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档