Если что, я в предыдущем моём посте имел ввиду что моя соц.сеть имеет структуированный код, от ООП я отказался, нужно было чтобы соц.сеть не тормозила, чтобы не было ошибки 503, и чтобы можно было на дешёвом вебхостинге установить соц.сеть.
Вот мой ютуб на asp net и c#, преобразователь (MediaServer.dll) я не могу включить, ищите этот компонент в гугле "Softpae Mediaserver" или дайте поиск ffmpeg для c# "ffmpeg c#":
Вот тут начинается самое интересное, это процесс загрузки видео на сервер и конвертация видео в mp4:
// файл находится ./uploads/Default.aspx.cs:
// См. https://stackoverflow.com/questions/40452943/how-to-convert-video-in-multiple-bitrate-using-asp-net/40453342
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Diagnostics;
using System.IO;
using Softpae.Media;
public partial class uploads_Default : System.Web.UI.Page
{
// Преобразования файла из любого формата, в mp4 (aac, h264):
private void Convert(String filename1, String filename2)
{
Job2Convert myJob = new Job2Convert();
MediaServer ms = new MediaServer();
myJob.pszSrcFile = filename1;
myJob.pszDstFile = filename2;
myJob.pszDstFormat = "mp4";
myJob.pszAudioCodec = "aac";
myJob.pszVideoCodec = "h264";
/*myJob.nVideoFrameWidth = 640;
myJob.nVideoFrameHeight = 480;*/
ms.ConvertFile(myJob);
}
protected void Page_Load(object sender, EventArgs e)
{
}
// Пользователь нажал на кнопку "загрузить"
protected void btnHochladen_Click(object sender, EventArgs e)
{
// Если имя файла больше 5 символов, то загружаем и конвертируем
// Тут браузер замерзает, пока видео не загрузится на сервер, и пока не переконвертируется
if (fuUpload.FileName.Length > 5)
{
// Загрузка видео на сервер
fuUpload.SaveAs(Server.MapPath("~") + "\\videos\\original\\" + fuUpload.FileName);
// Конвертирование видео в mp4
Convert(Server.MapPath("~") + "\\videos\\original\\" + fuUpload.FileName, Server.MapPath("~") + "\
\videos\\" + fuUpload.FileName + ".mp4");
Session["path"] = Server.MapPath("~") + "\\videos\\" + fuUpload.FileName + ".mp4";
Session["file"] = fuUpload.FileName + ".mp4";
// Чтобы не произошла ошибка timeout, нужно указать это в web.config:
// https://stackoverflow.com/questions/223748/preventing-browser-timeout-on-large-file-uploads
// Переход для редактирования (название и категория видео)
Response.Redirect("VideoEdit.aspx");
}
else
{
// Если имя файла меньше 5 символов, даём ошибку...
Label1.Text = "Пожайлуста выберите файл.";
Label1.ForeColor = System.Drawing.Color.Red;
}
}
}
Red5 там потоковое видео, его нельзя скачать...
Я выбрал для прямой траснляции red5, посмотрел этот видеоролик и сделал всё так-же как в этом видео:
Вот прямая трансляция в моей соцсети/ютуба:
После нажатия на "share live stream" (слева), друзья пользователя который стримит, видят его в прямом эфире (справа):
На сервере установлен red5:
Запущен как служба:
Современный red5 может стримить в html5:
Простой пример прямой трансляции самому себе в <video>:
<!DOCTYPE html>
<html>
<head>
<title>Live Test</title>
<script src="https://webrtc.github.io/adapter/adapter-latest.js"></script>
</head>
<body>
<video id="webcamera_livedemo" autoplay width="640px" height="480px"></video>
<br>
<button id="btnGoLive">Go Live!</button>
<button id="btnStop" style="display:none;">Stop</button>
<script>
document.getElementById('btnGoLive').addEventListener('click', async function init(e) {
try {
const objstream = await navigator.mediaDevices.getUserMedia({ audio: true, video: true, width:1024,
height:768 });
const carrVideoTracks = objstream.getVideoTracks();
const carrAudiotracks = objstream.getAudioTracks();
alert('Live:' + carrVideoTracks[0].label);
document.getElementById('webcamera_livedemo').srcObject = objstream;
document.getElementById('btnStop').addEventListener('click', function(e) {
carrVideoTracks[0].stop();
carrAudiotracks[0].stop();
document.getElementById('btnGoLive').setAttribute('style', 'display:block;');
document.getElementById('btnStop').setAttribute('style', 'display:none;');
});
document.getElementById('btnGoLive').setAttribute('style', 'display:none;');
document.getElementById('btnStop').setAttribute('style', 'display:block;');
} catch (error) {
alert(error.name);
console.error(error);
}
});
</script>
</body>
</html>
Результат: