1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/xhby-Harmonic

Клонировать/Скачать
README.md 5.5 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 06:51 d5ed296

Harmonic

Высокопроизводительный фреймворк для приложений потоковой передачи в реальном времени по протоколу 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

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

Протоколы websocket и rtmp работают на двух разных контроллерах, поэтому при отправке видео на URL: rtmp://127.0.0.1/living/a, соответствующий URL воспроизведения для websocket — ws://127.0.0.1/websocketplay/a.

Внутренние контроллеры

LivingController

LivingController предоставляет простой сервис «живого» вещания, он принимает видео- или аудиоданные и транслирует данные другим пользователям.

RecordController

RecordController поддерживает...

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/xhby-Harmonic.git
git@api.gitlife.ru:oschina-mirror/xhby-Harmonic.git
oschina-mirror
xhby-Harmonic
xhby-Harmonic
master