Agora On-premise 录制 SDK 录制的影片的顶端和底端被截断
Posted
技术标签:
【中文标题】Agora On-premise 录制 SDK 录制的影片的顶端和底端被截断【英文标题】:The top and the bottom end of movies recorded by Agora On-premise recording SDK are cut off 【发布时间】:2021-08-23 05:57:53 【问题描述】:我想使用 Agora On-premise SDK 开发一个智能手机用户竖屏视频流的记录器。
但是,由于纵横比选项不包括肖像,因此录制的影片的顶部和底部被截断。
我通过重写 Agora Restful Recording Nodejs Sample 来实现这一点。 https://github.com/AgoraIO/Basic-Recording
我可以采取任何方法来解决这个问题吗? 或者,我可以重写 SDK 文件来解决这个问题吗? 或者,视频流在服务器收到后就已经被截断了?
脚本如下。
const RtcTokenBuilder, RtcRole = require("agora-access-token")
const AgoraRecordingSDK = require("./AgoraRecordSdk");
const path = require("path");
const fs = require("fs");
require('dotenv').config();
if (process.env.NODE_ENV !== 'production')
require('dotenv').config();
const publisher_uid = "*********"
const channelName = "*********"
startRecording(channelName,publisher_uid)
function startRecording(channelName,publisher_uid)
let rec = new AgoraRecordingSDK();
let layout =
"canvasWidth": 480,
"canvasHeight": 480,
"backgroundColor": "#eeeeee",
"regions": []
rec.setMixLayout(layout);
rec.on("joinchannel", function (channel, uid)
console.log(`channel joined $channel $uid`);
);
rec.on("error", function (err, stat)
console.log(`err $err $stat`);
);
rec.on("recordingStats", function(stats)
console.log(`recording stats $JSON.stringify(stats)`)
)
rec.on("userleave", function(uid)
console.log(`userleave $uid`);
if(String(uid) == String(publisher_uid))
rec.leaveChannel();
);
rec.on("userjoin", function (uid)
//rearrange layout when new user joins
console.log(`userjoin $uid`);
if(String(uid) == String(publisher_uid))
let region =
"x": 0,
"y": 0,
"width": 480,
"height": 480,
"zOrder": 1,
"alpha": 1,
"uid": uid
layout.regions.push(region)
rec.setMixLayout(layout);
);
let storageDir = path.resolve(__dirname, "./output/"+channelName);
const token = function ()
const role = RtcRole.SUBSCRIBER
const expirationTimeInSeconds = 60 * 150
const currentTimestamp = Math.floor(Date.now() / 1000)
const privilegeExpiredTs = currentTimestamp + expirationTimeInSeconds
const token = RtcTokenBuilder.buildTokenWithUid(process.env.APP_ID, process.env.APP_CERTIFICATE, channelName, Number(process.env.UID), role, privilegeExpiredTs)
return token
fs.mkdir(storageDir, recursive: true, async (err) =>
console.log("err:"+err)
//join channel
await rec.joinChannel(token(), channelName, Number(process.env.UID), process.env.APP_ID, storageDir);
)
return rec;
【问题讨论】:
【参考方案1】:如果您不希望顶部和底部被切断,您可以将渲染模式更改为适合而不是隐藏。这将在侧面引入黑条,而不是切断视频。您需要像这样在区域对象中添加渲染模式:
let region =
"x": 0,
"y": 0,
"width": 480,
"height": 480,
"zOrder": 1,
"alpha": 1,
"renderMode": 1,
"uid": uid
【讨论】:
感谢您的回答。我用下面的代码试过了,但是录制的视频全是黑色的,什么也没有。让区域= “x”:0,“y”:0,“宽度”:480,“高度”:480,“zOrder”:1,“alpha”:1,“renderMode”:1,“uid”: uid 我也用下面的代码试过了,但结果是一样的。让区域= “x”:0,“y”:0,“宽度”:1280,“高度”:720,“zOrder”:1,“alpha”:1,“renderMode”:1,“uid”: uid 如果您有任何解决方案,请告诉我。 嘿。就我所知,您正在录制视频,但在不添加渲染模式时将侧面切断。一旦添加了 renderMode,录制就会变黑。对吗? 后者是对的,而前者是不对的。不添加renderMode时,有边不切断,只切断上下。一旦我添加了 renderMode,录制就会变黑。 当你说“边”时,你是指包括顶部和底部的边吗?如果是这样,那么你说的是正确的。对不起。 嘿@kokucoco。这对我来说就像一个错误。你能在agora-ticket.agora.io提交一张票吗?以上是关于Agora On-premise 录制 SDK 录制的影片的顶端和底端被截断的主要内容,如果未能解决你的问题,请参考以下文章
设置 agora.io 录制服务器时出现错误:20,stat_code:3
RTC月度小报5月 |教育aPaaS灵动课堂升级抢先体验VUE版 Agora Web SDK声网Agora与HTC达成合作