DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: wugangbest
今日帖子: 26
在线用户: 24
导航: 论坛 -> 发布控件 斑竹:liumazi,ruralboy  
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲▲▲ -
普通会员
2019/8/22 23:15:39
标题:
QuickBurroV5.21发布,开始支持流媒体点播! 浏览:2238
加入我的收藏
楼主: QuickBurro V5.21发布! 本次主要更新:
==========
1、几个客户反馈问题的修正
2、Web服务部分增加JWT支持
3、Web部分增加目录权限规则控制
4、消息传输开始支持受众的通配符匹配
5、核心服务增加流媒体点播服务
6、核心服务增加短视频HLS切片与打包
7、增加流媒体采集发布管理工具
8、客户端SDK及API单元增加服务端切片控制系列方法
9、增加AutoCAD图形文件访问相关插件
10、增加AutoCAD图形文件访问的客户端控件
11、Qua框架增加与上述相关的20余个函数
----------
欢迎下载试用!欢迎订购本产品!
https://www.quickburro.org/
----------------------------------------------
樵夫的大马甲
作者:
男 fausten (fausten) ★☆☆☆☆ -
盒子活跃会员
2019/8/23 6:51:42
1楼: 牛!!!
----------------------------------------------
-
作者:
男 delphixe8 (delphixe8) ▲▲▲▲△ -
普通会员
2019/8/23 10:24:16
2楼: 高大上啊,牛!!!
----------------------------------------------
-
作者:
男 l_wming (L_Wming) ★☆☆☆☆ -
普通会员
2019/8/24 9:17:39
3楼: 666 可以做delphi版抖音了
----------------------------------------------
-
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲▲▲ -
普通会员
2019/8/24 17:06:42
4楼: 确实可以!
前端可以选用“Android+IOS FFMPEG 视频转换Delphi组件”等实现视频数据的格式转换、配音、配字幕等,再转为quickburro支持的qmf文件发布,就可以供点播了。没什么难度了。
----------------------------------------------
樵夫的大马甲
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲▲▲ -
普通会员
2019/8/24 17:21:00
5楼: 提供专门的后台采集、转码、发布、管理工具
.
此帖子包含附件:
PNG 图像
大小:451.0K
----------------------------------------------
樵夫的大马甲
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲▲▲ -
普通会员
2019/8/24 17:23:26
6楼: 手机端,delphi开发前端应用也很容易,比如,我写了个简单的demo
.
此帖子包含附件:
JPEG 图像
大小:220.7K
----------------------------------------------
樵夫的大马甲
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲▲▲ -
普通会员
2019/8/24 17:23:53
7楼: //
// 视频录制回调...
function TForm14.OnActivityResult(RequestCode, ResultCode: Integer; Data: JIntent): Boolean;
var
  FS: TFileStream;
begin
  Result := False;
  TMessageManager.DefaultManager.Unsubscribe(TMessageResultNotification, FMessageSubscriptionID);
  FMessageSubscriptionID := 0;
  if RequestCode = RECORD_VIDEO then
     begin
       if ResultCode = TJActivity.JavaClass.RESULT_OK then
          begin
          TThread.Queue(nil, procedure
          begin
          if (TFile.Exists(VFileName)) then
          begin
          try
          FS := TFileStream.Create(VFileName, fmShareDenyNone);
          memo1.Lines.Add('视频录制成功(myvideo.mp4)!请播放测试!');
          finally
          fs.Free;
          end;
          end;
          Invalidate;
          end);
          end;
     end;
end;

//
// 订阅的消息...
procedure TForm14.HandleActivityMessage(const Sender: TObject; const M: TMessage);
begin
  if M is TMessageResultNotification then
     begin
       OnActivityResult(TMessageResultNotification(M).RequestCode, TMessageResultNotification(M).ResultCode,
          TMessageResultNotification(M).Value);
     end;
end;

//
// 连接服务器...
procedure TForm14.SpeedButton1Click(Sender: TObject);
begin
   if MBConn.Connect then
      begin
         memo1.Lines.Add('连接服务器成功!');
         Receiver.Active:=true;
         memo1.Lines.Add('消息接收器开启!');
         RemoteFileName:='uploads\myvideo.mp4';
         QMFFileName:='homepage\video\myvideo.qmf';
         localplaying:=false;
         remoteplaying:=false;
      end
   else
      memo1.Lines.Add('*** 连接服务器失败,Error='+MBConn.LastError);
end;

//
// 录制视频...
procedure TForm14.Button1Click(Sender: TObject);
var
  VideoIntent: JIntent;
  videoUri: Jnet_Uri;
  AFile: JFile;
begin
  FMessageSubscriptionID := TMessageManager.DefaultManager.SubscribeToMessage(TMessageResultNotification, HandleActivityMessage);
  VideoIntent := TJIntent.JavaClass.init(TJMediaStore.JavaClass.ACTION_VIDEO_CAPTURE);
  if (VideoIntent.resolveActivity(TAndroidHelper.Context.getPackageManager()) <> nil) then
     begin
       VFileName := TPath.Combine(TPath.GetSharedDocumentsPath, 'myvideo.mp4');
       AFile := TJFile.JavaClass.init(StringToJString(VFileName));
       videoUri := TJnet_Uri.JavaClass.fromFile(AFile);
       VideoIntent.putExtra(TJMediaStore.JavaClass.EXTRA_OUTPUT, TJParcelable.Wrap((videoUri as ILocalObject).GetObjectID));
       TAndroidHelper.Activity.startActivityForResult(VideoIntent, RECORD_VIDEO);
     end;
end;

//
// 本地MP4播放...
procedure TForm14.Button6Click(Sender: TObject);
begin
   if localplaying then
      begin
         browser.Visible:=false;
         memopanel.Visible:=true;
         Button6.Text:='MP4视频播放';
         localplaying:=false;
      end
   else
      begin
         memopanel.Visible:=false;
         browser.Visible:=true;
         browser.Navigate('file://'+vfilename);
         Button6.Text:='结束播放';
         localplaying:=true;
      end;
end;

//
// 上传MP4到服务端...
procedure TForm14.Button7Click(Sender: TObject);
var
   FirstBlockId,i: integer;
   ok: boolean;
begin
   browser.Visible:=false;
   memopanel.Visible:=true;
   progresspanel.Visible:=true;
   FirstBlockId:=0;
   for i := 1 to 5 do
      begin
         ok:=ftp.UploadFile(VFileName,RemoteFileName,FirstBlockId);
         if ok then
          break;
         FirstBlockId:=ftp.LastOkBlockId+1;
         memo1.Lines.Add('*** 上传MP4文件到服务端失败,开始重试...');
         application.ProcessMessages;
      end;
   if ok then
      begin
         memo1.Lines.Add('上传MP4文件到服务端成功,请继续切片处理!');
         progresspanel.Visible:=false;
      end
   else
      memo1.Lines.Add('*** 尝试多次上传MP4文件到服务端仍失败,无法继续测试.');
end;

//
// 上传进度...
procedure TForm14.FTPFileTransferProgress(MaxBlocks, OkBlocks: Integer);
begin
   progressbar.Max:=MaxBlocks;
   progressbar.Value:=OkBlocks;
end;

//
// 开始HLS切片及打包...
procedure TForm14.Button2Click(Sender: TObject);
var
   Params: TConvertParameters;
begin
   browser.Visible:=false;
   memopanel.Visible:=true;
//
// 转换参数...
   Params.Height:=round(memo1.Height);
   Params.Width:=round(memo1.Width);
   Params.PieceSeconds:=6;
   Params.FrameRate:=25;
   Params.VideoBitrate:=1000;
   Params.AudioBitrate:=80;
   Params.CodeLength:=4;
//
// 开始调用...
   if Files.MediaConvertToQMF(RemoteFileName,qmffilename,Params) then
      memo1.Lines.Add('提交服务端切片打包任务成功,请等待处理结果...')
   else
      memo1.Lines.Add('*** 提交服务端切片打包任务失败!Error='+Files.LastError);
end;

//
// HLS切片及打包回调(收到消息时)...
procedure TForm14.ReceiverMessageArrives(Sender: TObject; NewMsgCount: Integer);
var
   MsgParcel: TMBParcel;
begin
   browser.Visible:=false;
   memopanel.Visible:=true;
   Receiver.PopMessage(MsgParcel);
   if MsgParcel.GetStringGoods('MsgType')<>'AsyncExecuteResult' then
      exit;
   if MsgParcel.GetBooleanGoods('ProcessResult') then
      memo1.Lines.Add('切片打包任务成功完成!')
   else
      memo1.Lines.Add('*** 切片打包任务执行失败!');
end;

//
// 取QMF文件属性...
procedure TForm14.Button3Click(Sender: TObject);
var
   Prop: TQMFProperty;
begin
   browser.Visible:=false;
   memopanel.Visible:=true;
   if Files.GetRemoteQMFProperty(qmffilename,prop) then
      begin
         memo1.Lines.Add('获取服务端QMF文件属性成功!');
         memo1.Lines.Add('切片数据块数:'+inttostr(prop.BlockCount));
         memo1.Lines.Add('画面宽度:'+inttostr(prop.Width));
         memo1.Lines.Add('画面高度:'+inttostr(prop.Height));
         memo1.Lines.Add('切片时长(秒):'+inttostr(prop.PieceSeconds));
         memo1.Lines.Add('帧率(帧/秒):'+inttostr(prop.FrameRate));
         memo1.Lines.Add('视频比特率:'+inttostr(prop.VideoBitrate)+'k');
         memo1.Lines.Add('音频比特率:'+inttostr(prop.AudioBitrate)+'k');
         memo1.Lines.Add('切片文件名长度:'+inttostr(prop.NameLength));
         memo1.Lines.Add('切片编码长度:'+inttostr(prop.CodeLength));
      end
   else
      memo1.Lines.Add('*** 获取服务端QMF文件属性失败!');
end;

//
// 远程播放测试QMF...
procedure TForm14.Button4Click(Sender: TObject);
var
   Url: string;
begin
   if remoteplaying then
      begin
         browser.Visible:=false;
         memopanel.Visible:=true;
         Button4.Text:='远程播放QMF';
         remoteplaying:=false;
      end
   else
      begin
         url:='http://'+MBConn.Host;
         if MBConn.Port<>80 then
          url:=url+':'+inttostr(MBConn.Port);
         url:=url+'/video/myvideo/index.m3u8';
         memopanel.Visible:=false;
         browser.Visible:=true;
         browser.Navigate(url);
         remoteplaying:=true;
         Button4.Text:='结束播放';
      end;
end;

//
// 退出...
procedure TForm14.Button5Click(Sender: TObject);
begin
   mbconn.Disconnect;
   close;
end;
----------------------------------------------
樵夫的大马甲
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲▲▲ -
普通会员
2019/8/28 20:17:06
8楼: 功能强大的Delphi中间件,新版支持HLS流媒体点播,欢迎测试:
(2M带宽的云服务器,人多时播放有卡顿,见谅)

我们的星球:
http://www.quickburro.org/videodemo.html

黑衣人4:
http://www.quickburro.org/videodemox.html

速度与激.情5:
http://www.quickburro.org/videodemox3.html

----------
相信Delphi,开发效率高、低投入高产出、无所不能!
----------------------------------------------
樵夫的大马甲
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行89.84375毫秒 RSS