我试图上传实时视频流使用Javascript和.NET网络套接字。我正在将Base64编码的数据每秒传递到webm服务器,在该服务器中,它将数据附加到一个文件中,该文件采用webm格式。有时,视频没有上传,原因是未知的错误,或者是部分上传。有人可以帮助最好的方法上传视频在服务器上的实时,并将其转换为MP4,而没有付费的第三方工具。我正在使用下面的代码-
//js code
var handleDataAvailable = function(event) {
if (event.data && event.data.size > 0) {
try{
var reader = new window.FileReader();
reader.onloadend = function () {
var base64data = reader.result;
if (ws.readyState == WebSocket.OPEN){
ws.send(base64data);
}
}
reader.readAsDataURL(event.data);
}catch(ex){
}
}
}
const SERVER_URL = "ws://localhost:5029";
var ws = new WebSocket(SERVER_URL);
var mediaRecorder = new MediaRecorder(outputStream, options);
mediaRecorder.ondataavailable = handleDataAvailable;
// C# code
// System.Net.WebSockets;
// websocket connection handling code
//
//on message event of websocket
public async Task OnMessage(string message)
{
var base64Data = Regex.Match(message, @"data:video/(?<type>.+?),(?<data>.+)").Groups["data"].Value;
var ByteArray = Convert.FromBase64String(base64Data);
string path = "~//TempUploads//Recordings//test.webm";
if (!Directory.Exists(HttpContext.Current.Server.MapPath(path)))
{
Directory.CreateDirectory(HttpContext.Current.Server.MapPath(path));
}
using (var stream = new FileStream(HttpContext.Current.Server.MapPath(path), FileMode.Append))
{
try
{
stream.Write(ByteArray, 0, ByteArray.Length);
}
catch (Exception ex)
{
}
}
}
发布于 2020-04-26 10:08:10
对于在MediaRecorder API中遇到类似问题的人,请确保检查以下要点:
mediaRecorder.start()
记录流start()
方法,例如:mediaRecorder.start(1500)
。这一个给你的客户提供了更多的呼吸空间,在各块之间,减慢了你向后端发送数据的速度,但它增加了数据块的大小。https://stackoverflow.com/questions/54684649
复制相似问题