秋·风

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  278 随笔 :: 0 文章 :: 308 评论 :: 20万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

delphi xe系列自带的控件都无法保存录像,经网友帮忙,昨天终于实现了录像功能(但有个问题是录像时无画面显示),程序主要使用了JMediaRecorder,MediaRecorder的使用方法可参考网上java的相关说明,下面代码是可以正常录像的:

复制代码
unit Unit8;

interface

uses
 System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  Androidapi.Helpers, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,FMX.Media.Android,Androidapi.JNI.Media,
  FMX.Controls.Presentation, FMX.StdCtrls,System.IOUtils,Androidapi.JNI.GraphicsContentViewText,
  Androidapi.JNI.Provider,
  Androidapi.JNI.App,
  Androidapi.JNI.Net,
  Androidapi.JNIBridge,
  FMX.Media,
  Androidapi.JNI.JavaTypes,
  Androidapi.JNI.Os;

type
  TForm8 = class(TForm)
    Button3: TButton;
    Button4: TButton;
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
     texture : JSurfaceTexture;
     surface: JSurface;
     recorder: JMediaRecorder;
  public
    { Public declarations }
  end;

var
  Form8: TForm8;

implementation

{$R *.fmx}

procedure TForm8.Button3Click(Sender: TObject);
VAR  FILENAME:STRING;
begin
  texture := TJSurfaceTexture.JavaClass.init(1);
  surface := TJSurface.JavaClass.init(texture);
  recorder := TJMediaRecorder.Create();

  recorder.setPreviewDisplay(surface);
  recorder.setAudioSource(TJMediaRecorder_AudioSource.JavaClass.MIC    );
  recorder.setVideoSource(TJMediaRecorder_VideoSource.JavaClass.CAMERA);
  recorder.setOutputFormat(TJMediaRecorder_OutputFormat.JavaClass.MPEG_4);
  recorder.setAudioEncoder(TJMediaRecorder_AudioEncoder.JavaClass.DEFAULT);
  recorder.setVideoEncoder(TJMediaRecorder_VideoEncoder.JavaClass.H264);
  recorder.setMaxDuration(1800000); // 30 minutes
  recorder.setVideoSize(320, 240);
  recorder.setVideoFrameRate(15);
   filename:=TPath.GetSharedCameraPath+'/abc0002.mp4';
  recorder.setOutputFile(StringToJString(FILENAME));
  recorder.prepare();
  recorder.start();
end;

procedure TForm8.Button4Click(Sender: TObject);
begin
   recorder.stop;
end;

end.
复制代码

 

posted on   秋·风  阅读(1803)  评论(2编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示