В настоящее время я работаю над автономным приложением, которое может обрабатывать связь с мобильного телефона, а также использует проигрыватель VL C для вывода потока. Я делаю так, что объект потока вывода находится в главном окне, но я получаю запросы через SignalR. Запрос довольно прост - это просто строка. Проблема в том, что я понятия не имею, как передать строку из концентратора SignalR обратно в объект MediaPlayer. Как получить строку, переданную внешнему объекту, или сделать так, чтобы медиаплеер "сохранялся" внутри хаба? На данный момент мой код относительно этого выглядит следующим образом:
Концентратор:
[HubName("CommHub")]
public class CommHub:Hub
{
VLCControl outputplayer = new VLCControl();
public void RequestConnectionsList()
{
var databasePath = "--dbpath here--";
var db = new SQLiteConnection(databasePath);
List<string> output = db.Table<VideoSources>().Select(p => p.Name).ToList(); //Gets names from the db
Clients.Client(Context.ConnectionId).CamsInfo(output); //send available connection names to client
}
public void RequestOutStream(string requestedName) //this function is called but i have no idea how to make it work
{
outputplayer.playSelected(requestedName);
}
}
VLCControl:
class VLCControl
{
public Media rtsp;
private const string VIDEO_URL = "rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov";
private MediaPlayer player;
public static string GetConfigurationString() //using this method in mainwindow player as well
{
string address = Properties.Settings.Default.LocalAddress;
string port = Properties.Settings.Default.LocalPort;
string result=
":sout=#duplicate" +
"{dst=display{noaudio}," +
"dst=rtp{mux=ts,dst=" + address +
",port=" + port + ",sdp=rtsp://" + address + ":" + port + "/go.sdp}";
return result;
}
public void playSelected(string inputAddress)
{
var databasePath = "D:\\Projects\\Sowa\\Sowa\\Serwer\\VideoSources.db";
var db = new SQLiteConnection(databasePath);
string input = db.Table<VideoSources>().FirstOrDefault(p => p.Name == "test").Address;
db.Close();
var rtsp = new Media(MainWindow._libvlc, input, FromType.FromLocation);
rtsp.AddOption(VLCControl.GetConfigurationString());
player.Stop();
player.Play(new Media(MainWindow._libvlc, VIDEO_URL, FromType.FromLocation));
}
}
Игроки определенно работают - когда я создаю медиаплеер в главном окне он действительно выводит, как ожидалось.