Высокопроизводительный фреймворк для приложений потоковой передачи в реальном времени по протоколу RTMP.
Program.cs
using Harmonic.Hosting;
using System;
using System.Net;
namespace demo
{
class Program
{
static void Main(string[] args)
{
RtmpServer server = new RtmpServerBuilder()
.UseStartup<Startup>()
.Build();
var tsk = server.StartAsync();
tsk.Wait();
}
}
}
StartUp.cs
using Autofac;
using Harmonic.Hosting;
namespace demo
{
class Startup : IStartup
{
public void ConfigureServices(ContainerBuilder builder)
{
}
}
}
Постройте сервер, подобный этому, чтобы поддерживать передачу данных через WebSocket-FLV.
```csharp
RtmpServer server = new RtmpServerBuilder()
.UseStartup<Startup>()
.UseWebSocket(c =>
{
c.BindEndPoint = new IPEndPoint(IPAddress.Parse("0.0.0.0"), 8080);
})
.Build();
Harmonic будет сканировать вашу сборку и пытаться найти классы, которые наследуются от RtmpController
или WebSocketController
, затем регистрировать их в Harmonic и сопоставлять контроллер с URL rtmp://<адрес>/<имя_контроллера>/<streamName>
для rtmp и ws://<адрес>/<имя_контроллера>/<streamName>
. Имя контроллера — это имя класса контроллера без суффикса Controller
, например, Living
— это имя контроллера для LivingController
. Как только Harmonic найдёт любой класс, который наследуется от RtmpController
или WebSocketController
, он никогда не зарегистрирует RtmpController
и WebSocketController
.
Вы также можете наследовать встроенные классы LivingController
или WebSocketPlayController
, когда Harmonic обнаружит класс, наследующий от них, он не будет регистрировать LivingController
и WebSocketPlayController
. Если вы хотите настроить логику потоковой передачи, вы можете создать класс, наследующийся от LivingController
или WebSocketPlayController
.
public class MyLivingController : LivingController
{
[RpcMethod("createStream")]
public new uint CreateStream()
{
var stream = RtmpSession.CreateNetStream<MyLivingStream>();
return stream.MessageStream.MessageStreamId;
}
}
public class MyLivingStream : LivingStream
{
[RpcMethod(Name = "publish")]
public void Publish([FromOptionalArgument] string publishingName, [FromOptionalArgument] string publishingType)
{
if (...)
{
}
// ваша логика
base.Publish(publishingName, publishingType);
}
}
RtmpController и WebSocketController — два абстрактных базовых контроллера, они предназначены для обслуживания видео по протоколам rtmp и websocket. Когда класс контроллера наследует от RtmpController, он становится контроллером rtmp, он будет работать по протоколу rtmp и поддерживать все функции rtmp. Когда класс контроллера наследует от WebSocketController, он станет контроллером websocket, он может отправлять только заголовок и теги FLV.
Контроллер RecordController
может записывать видео, по умолчанию он сохраняет файлы FLV в working_dir/Record
. Вы можете переопределить конфигурацию записи, зарегистрировав собственный класс конфигурации в классе StartUp
.
class MyRecordConfiguration: RecordServiceConfiguration
{
public override string RecordPath { get; set; } = @"MyRecordPath";
public override string FilenameFormat { get; set; } = @"recorded-{streamName}";
};
class Startup : IStartup
{
public void ConfigureServices(ContainerBuilder builder)
{
builder.Register(c => new MyRecordConfiguration()).As<RecordServiceConfiguration>();
}
}
Протоколы websocket и rtmp работают на двух разных контроллерах, поэтому при отправке видео на URL: rtmp://127.0.0.1/living/a
, соответствующий URL воспроизведения для websocket — ws://127.0.0.1/websocketplay/a
.
LivingController предоставляет простой сервис «живого» вещания, он принимает видео- или аудиоданные и транслирует данные другим пользователям.
RecordController поддерживает...
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )