SDev.Pro - разработка на заказ

http://sdev.pro - это:

1) Разработка программного обеспечения

Мы используем платформы ASP.NET MVC, LAMP, Atmel, Android, iOS, DirectShow и базы данных MS SQL, Oracle, PostgreSQL, а также облака на MS Azure и Amazon AWS для реализации любых Ваших идей.

2)Внедрение программного обеспечения

Мы предлагаем настройку и доработку решений на базе систем электронного документооборота MS SharePoint Server, геоинформационных систем на GeoServer, систем отчетности на MS SQL Reporting Services, а также облачных решений на MS Office 365.

http://sdev.pro

Sep 3, 2009

Expression Encoder 3.0 SDK: Вещание в сеть

В продолжение темы: http://dotnet.wonderu.com/2009/07/expression-encoder-30-sdk.html

Пример вещания в сеть видео-аудио потока, используя Microsoft Expression Encoder 3.0 SDK.

#region Copyright
//
// Пример вещания видео-аудио потока, используя Microsoft Expression Encoder 3.0
// Игорь Подсекин (wonderu@gmail.com)
// Лицензия LGPL
// http://dotnet.wonderu.com
// http://directshow.wonderu.com
//
#endregion

using System;
using Microsoft.Expression.Encoder.Live;

namespace Com.Wonderu.Samples.Expression.Encoder
{
/// <summary>
/// Класс вещателя
/// </summary>
public class Broadcaster: IDisposable
{
private LiveJob _job;

/// <summary>
/// Конструктор
/// </summary>
public Broadcaster()
{
_job = new LiveJob();
}

/// <summary>
/// Освобождение.
/// </summary>
public void Dispose()
{
if (_job != null)
_job.Dispose();
}

/// <summary>
/// Старт
/// </summary>
public void Start()
{
if (_job == null)
throw new NullReferenceException("Live Job не существует");

//Выбор устройств
LiveDevice videoDevice = _job.VideoDevices.Count > 0 ? _job.VideoDevices[0] : null ;
LiveDevice audioDevice = _job.AudioDevices.Count > 0 ? _job.AudioDevices[0] : null;

LiveDeviceSource liveSource = _job.AddDeviceSource(videoDevice, audioDevice);

// Активация
_job.ActivateSource(liveSource);

// Создание формата вещания
WindowsMediaBroadcastOutputFormat outputFormat =
new WindowsMediaBroadcastOutputFormat
{
//Порт
BroadcastPort = 8080,

//Максимальное число подключений
MaximumNumberOfConnections = 10
};

// Установка выходного формата
_job.OutputFormat = outputFormat;

// Начало вещания
_job.StartEncoding();
}

/// <summary>
/// Стоп
/// </summary>
public void Stop()
{
if (_job == null)
throw new NullReferenceException("Live Job не существует");

_job.StopEncoding();
}
}
}



}




Ссылка на видео-аудио поток будет следующего вида mms://<server name>:8080.

6 comments:

  1. Это работает, но трансляция идёт с задержкой 15-17 секунд, даже в локальной сети. С чем это может быть связано?

    ReplyDelete
  2. Тут похожая тема http://forum.wonderu.com/topic807.html
    Попробуйте поискать методы или свойства, связанные с Buffering Time. К сожалению, сейчас нет установленного энкодера, поэтому сам глянуть не могу. Если получится, отпишитесь, пожалуйста.

    ReplyDelete
  3. Я поигрался с параметрами DeinterlaceMode, ResizeQuality, SampleDropperSensitivity и т.п., удалось уменьшить задержку до 12 секунд.

    Такая же задержка, если принимать картинку с камеры локально стандартным Windows Media Player'ом. Буферизация там идет секунды три, потом появляется картинка с камеры, но с задержкой в 12 секунд.
    Я думаю, что это проблема самого энкодера. Мне кажется, он тормозной.
    http://blogs.msdn.com/expressionencoder/default.aspx - тут пишут, чтобы увеличить производительность, нужно сделать апгрейд компа :)

    Буду рад, если кто-то меня переубедит...

    ReplyDelete
  4. Это особенность не Expression Encoder, а Windows Media.

    ReplyDelete
  5. И это печально...
    Вообще, мне нужно написать прогу на WPF, которая бы снимала картинку с камеры и отправляла через сеть, а на том конце принимала картинку с минимальной задержкой.
    Вы можете что-то посоветовать?

    ReplyDelete
  6. Велкам ту http://forum.wonderu.com там несколько веток по передаче видео через сеть

    ReplyDelete