В продолжение темы: 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.
Это работает, но трансляция идёт с задержкой 15-17 секунд, даже в локальной сети. С чем это может быть связано?
ReplyDeleteТут похожая тема http://forum.wonderu.com/topic807.html
ReplyDeleteПопробуйте поискать методы или свойства, связанные с Buffering Time. К сожалению, сейчас нет установленного энкодера, поэтому сам глянуть не могу. Если получится, отпишитесь, пожалуйста.
Я поигрался с параметрами DeinterlaceMode, ResizeQuality, SampleDropperSensitivity и т.п., удалось уменьшить задержку до 12 секунд.
ReplyDeleteТакая же задержка, если принимать картинку с камеры локально стандартным Windows Media Player'ом. Буферизация там идет секунды три, потом появляется картинка с камеры, но с задержкой в 12 секунд.
Я думаю, что это проблема самого энкодера. Мне кажется, он тормозной.
http://blogs.msdn.com/expressionencoder/default.aspx - тут пишут, чтобы увеличить производительность, нужно сделать апгрейд компа :)
Буду рад, если кто-то меня переубедит...
Это особенность не Expression Encoder, а Windows Media.
ReplyDeleteИ это печально...
ReplyDeleteВообще, мне нужно написать прогу на WPF, которая бы снимала картинку с камеры и отправляла через сеть, а на том конце принимала картинку с минимальной задержкой.
Вы можете что-то посоветовать?
Велкам ту http://forum.wonderu.com там несколько веток по передаче видео через сеть
ReplyDelete