ОсновноеRadiotalkПользовательское
MPCHAT - CMS хостинг чатов для профессионалов
90   •   Посмотреть все темы

Вещание нику

 

2615
Сергей @Pegass
Вопрос скорее к Ridz'у

Возможно ли и если да то как, организовать возможность вещания(webcam) только определённому нику, т.е. пользователь выбирает ник и вещает только для него(них), при этом остальные пользователи не должны об этом узнать, кроме ника главного админа, т.е. статус меняться не должен.
Заранее спасибо

Отредактировано Pegass - 24.01.2012
2615
Сергей @Pegass
Такс, включать запись научился, осталось научиться посылать кнопку просмотра нужному нику, причём только в привате

1007
BETEPAH @BETEPAH
Pegass, знаю, что в радиофулл вопрос уже решен, но так как в своем чате тоже попросили сделать подобную функцию, привожу свой вариант (может кому-то еще пригодится).
Теория. Так как вебкамеры работают только с двумя статусами (98 и 99), пришлось разветвить один из них. Я выбрал следующий вариант:
1) при выборе статуса 98 в чат идет открытое для всех вещание без запроса, как в скрипте от ridz
2) при выборе статуса 99 проверяется поле tonick. Если в этом поле имеется чей-то ник, пользователю предлагается включить либо приватное вещание (когда для подключения остальным участникам необходимо будет сделать запрос на подключение), либо персональное вещание (когда ссылка на подключение отправится только одному нику, статус при этом будет выглядеть как статус 0).
Код (фреймовая версия):
webcam = 1; /* Включение вебкамер, 1 - вкл */
...
stn2[98] = "<img src=./ico/stat/webcam.png title='нажмите для просмотра вещания' border=0 alt=''>";
stn2[99] = stn2[0];

...
if (webcam) {
if (stat2 == 99 || stat2 == 98) {
if (stat2 == 98) icqst = "<a href=# onclick='loadvideo(\"webcam" + nick + "\",\"" + webcamhost + "\",\"" + nick + "\",0); parent.write.location.href = \"index.php?inc=write&" + parent.yourkey + "&text=/privat " + nick + ": смотрю вещание...\"; return false;'>" + icqst + "</a>";
if (nick == mynick && loaded) {
parent.users.loadvideo("mywebcam", webcamhost, nick, 1);
}
} else if (nick == mynick && loaded) parent.users.loadvideo("mywebcam", "");
}

...
if (tonick == mynick) {
text = text.replace("webcam_personal", "<a href=# onclick='parent.users.loadvideo(\"webcam" + nick + "\",\"" + webcamhost + "\",\"" + nick + "\",0); parent.write.location.href = \"index.php?inc=write&" + parent.yourkey + "&text=/privat " + nick + ": смотрю вещание...\"; return false;'>Приглашаю посмотреть моё вещание</a>");
text = text.replace("webcam_ok", "<a href=# onclick='parent.users.loadvideo(\"webcam" + nick + "\",\"" + webcamhost + "\",\"" + nick + "\",0); parent.write.location.href = \"index.php?inc=write&" + parent.yourkey + "&text=/privat " + nick + ": смотрю вещание...\"; return false;'>Нажмите для просмотра</a>");
text = text.replace("webcam_access", "Разрешить просмотр <a href=# onclick='parent.write.location.href = \"index.php?inc=write&" + parent.yourkey + "&text=/privat " + nick + " webcam_ok\";return false;'>да</a>/<a href=# onclick='parent.write.location.href = \"index.php?inc=write&" + parent.yourkey + "&text=/privat " + nick + " webcam_no\";return false;'>нет</a>?")
} else {
text = text.replace("webcam_personal", "Приглашаю посмотреть моё вещание");
text = text.replace("webcam_ok", "Просмотр разрешаю");
text = text.replace("webcam_access", "Разрешите просмотр?");
};
text = text.replace("webcam_no", "Просмотр отклонён");
if (nick == mynick) {
text = text.replace("webcam_privat", "<i>приватное вещание</i>")
} else {
text = text.replace("webcam_privat", "<i>приватное вещание <a href=# onclick='parent.write.location.href = \"index.php?inc=write&" + parent.yourkey + "&text=/privat " + nick + " webcam_access\";return false;'><img src=\"./ico/stat/webcam_access.png\" border=0 alt=\"\" onmouseover=\"this.border=1;\" onmouseout=\"this.border=0;\" ></a></i>")
}

...
/* Сообщение о смене статуса участника и его изменение */
if (cmd == 8) {
status = text;
for (var i = 0; i < us.length; i++)
if (us[i] != null && us[i][0] == nick) {
us[i][5] = status;
if (status == 99) {
if (nick == mynick) {
if (!parent.chat.document.fmsg.tonick.value.split(':')[0] || !confirm("Персональное вещание или требущее подтвеждения? \r\nНажатие на ОК отправит приглашение только для " + parent.chat.document.fmsg.tonick.value.split(':')[0] + ". \r\nЕсли нажмешь ОТМЕНА, включение камеры увидят все, но для подключения к вещанию должны будут запросить твоего согласия")) {
var msg_txt = "parent.write.location.href ='index.php?inc=write&" + parent.yourkey + "&text= webcam_privat '";
} else {
var msg_txt = "parent.write.location.href ='index.php?inc=write&" + parent.yourkey + "&text=/privat " + parent.chat.document.fmsg.tonick.value.split(':')[0] + " webcam_personal '";
}
window.setTimeout(msg_txt, 2000)
}
} else if (status == 98) {
wr(set_time + "<font size=2 color=" + colornick + "><b>" + set_nick + ":</b></font> <i>вещаю для всех <a href=# onclick=\'parent.users.loadvideo(\"webcam" + nick + "\",\"" + webcamhost + "\",\"" + nick + "\",0); parent.write.location.href = \"index.php?inc=write&" + parent.yourkey + "&text=/privat " + nick + ": смотрю вещание...\"; return false;\'><img src=./ico/stat/webcam.png border=0 alt=\"\" onmouseover='this.border=1;' onmouseout='this.border=0;' ></a></i><br>");
} else if (icqtxt[status]) {
wr(set_time + "<a href='' onclick=\"parent.tonick('" + nick + ": '); return false;\"><font size=2 color=" + colornick + " face='" + facenick + "'>" + set_nick + ":</font></a> <i>" + icqtxt[status] + "</i><br>");
}
var obj = parent.users.document.getElementById("!" + nick);
while (obj.cells.length) obj.deleteCell(0);
format(i, obj);
}
}

для безфреймовой, теоретически, надо убрать parent.users., parent.chat. и заменить parent.write. на parent.hidden.

2615
Сергей @Pegass
От только я не совсем понял, когда идет приватное вещание вне зависимости от того какого оно вида, в никлисте статус отображается как нулевой?


Да и вообще, пора уже сесть и написать выточенную до идеала схему)))

Отредактировано Pegass - 24.04.2012
1007
BETEPAH @BETEPAH
Pegass пишет:

От только я не совсем понял, когда идет приватное вещание вне зависимости от того какого оно вида, в никлисте статус отображается как нулевой?

Да. При 98м статусе показывается статус открытого вещания. При 99м - да, нулевой, ссылка на подключение к вещанию - в логе. Сделал это из-за того, что человек, зашедший в чат после включения кем-то персонального вещания, может увидеть, что это вещание ведётся, а просьба была сделать так, чтоб можно было незаметно для других отправлять приглашение к подключению. Пока не придумал, как сделать по-другому. Точнее, мысли есть, но нет времени на доточку.

Отредактировано BETEPAH - 24.04.2012
1007
BETEPAH @BETEPAH
Pegass пишет:

Да и вообще, пора уже сесть и написать выточенную до идеала схему)))

Может выпросим у Дмитрия еще один статус (например, 97й) для персонального вещания? 😉

2615
Сергей @Pegass
Надо для начала выпросить сессию вещания, а то приват какой-то ну ооооочень дырявый получается)))
И версию разработчика, а то если я снова начну на живую эксперименты ставить меня пользователи съедят)))

Отредактировано Pegass - 25.04.2012
2615
Сергей @Pegass
Я вот что подумал - а что если передавать в эту функцию ещё и пароль?
Сам пароль запрашивать при выборе соответствующего статуса



[spoiler=как то так]function loadvideo(obj,host,share,rec, pass)
{
var nickid=0;
if(share)
{
for(var i=0; i< share.length; i++)
nickid+=share.charCodeAt(i)*(i+1);
}
var camid="mpchat-"+parent.chatlogin+"_"+nickid+pass;
var obj1=document.getElementById(obj);
if(!obj1)
{
var obj1=document.createElement('DIV');
obj1.id=obj;
document.getElementById("cams").appendChild(obj1);
}
if(host=="")
{
obj1.innerHTML="&nbsp;";
obj1.style.display="none";
return;
}
obj1.innerHTML="<div id=flash"+obj+"><a href=http://get.adobe.com/flashplayer/ target=_blank><font size=1>Установите Flash Player!</font></a><br></div><div id=closer"+obj+"></div>";
var flashw=240;
var flashh=180;
var flashvars='host='+host+'&m=4&q=6&r=12&sharefile='+camid+'&sharelive='+camid+'&shareplay=#'+camid;
if(rec==1)
flashvars+='&rec=1';
swfobject.embedSWF("http://mpchat.com/blank/webcam.swf?v2.95", "flash"+obj, flashw, flashh, "9", "http://mpchat.com/blank/expressInstall.swf", {}, {allowfullscreen:"true",wmode:"transparent",flashvars:flashvars},{});
var stream="Просмотр"; var close="<a href=# onclick='loadvideo(\""+obj+"\",\"\"); return false;'><font size=1>закрыть</font></a>";
if(rec) {stream="Вещание"; close="<a href=# onclick='parent.gettime=new Date().getTime(); parent.setstatus(0); return false;'><font size=1>закрыть</font></a>";}
document.getElementById("closer"+obj).innerHTML+="<font size=1><b>"+stream+" #"+share+"</b></font> - "+close+"<br><br>";
obj1.style.display="block";
}
[/spoiler]


ЗЫ будем пробовать или уже после версии разработчика?

Отредактировано Pegass - 10.05.2012
1007
BETEPAH @BETEPAH
Pegass пишет:

Я вот что подумал - а что если передавать в эту функцию ещё и пароль?
Сам пароль запрашивать при выборе соответствующего статуса



[spoiler=как то так]function loadvideo(obj,host,share,rec, pass)
{
var nickid=0;
if(share)
{
for(var i=0; i< share.length; i++)
nickid+=share.charCodeAt(i)*(i+1);
}
var camid="mpchat-"+parent.chatlogin+"_"+nickid+pass;
var obj1=document.getElementById(obj);
if(!obj1)
{
var obj1=document.createElement('DIV');
obj1.id=obj;
document.getElementById("cams").appendChild(obj1);
}
if(host=="")
{
obj1.innerHTML="&nbsp;";
obj1.style.display="none";
return;
}
obj1.innerHTML="<div id=flash"+obj+"><a href=http://get.adobe.com/flashplayer/ target=_blank><font size=1>Установите Flash Player!</font></a><br></div><div id=closer"+obj+"></div>";
var flashw=240;
var flashh=180;
var flashvars='host='+host+'&m=4&q=6&r=12&sharefile='+camid+'&sharelive='+camid+'&shareplay=#'+camid;
if(rec==1)
flashvars+='&rec=1';
swfobject.embedSWF("http://mpchat.com/blank/webcam.swf?v2.95", "flash"+obj, flashw, flashh, "9", "http://mpchat.com/blank/expressInstall.swf", {}, {allowfullscreen:"true",wmode:"transparent",flashvars:flashvars},{});
var stream="Просмотр"; var close="<a href=# onclick='loadvideo(\""+obj+"\",\"\"); return false;'><font size=1>закрыть</font></a>";
if(rec) {stream="Вещание"; close="<a href=# onclick='parent.gettime=new Date().getTime(); parent.setstatus(0); return false;'><font size=1>закрыть</font></a>";}
document.getElementById("closer"+obj).innerHTML+="<font size=1><b>"+stream+" #"+share+"</b></font> - "+close+"<br><br>";
obj1.style.display="block";
}
[/spoiler]


ЗЫ будем пробовать или уже после версии разработчика?

Добавлю, что неплохо бы размерами управлять тоже извне скрипта, чтоб можно было подгонять размеры видео-окна.
function loadvideo(obj, host, share, rec, pass, flashw, flashh) {
...
var flashw = flashw || 240;
var flashh = flashh || 180;
...
}

Отредактировано BETEPAH - 11.05.2012
2615
Сергей @Pegass
Можно проще, короче щас буду заказ один делать, постараюсь и эти фишки прикрутить сразу)))

2615
Сергей @Pegass
Итого, пароль или ключ сессии реализовать не получится, без вмешательства Дмитрия.
На сегодняшний день под безфреймовую версию(первые 2 пункта работают во фреймовой в том виде что есть)
1) кнопка отключения звука(просмотр) или микрофона(вещание)
2) резиновый размер(пропорциональный)
3) каждое видео в отдельном перетаскиваемом и растягиваемом модальном окне(этот кусок отдам только платно)
4) при смене статуса, переходе в другую комнату или выходе из чата вещание закрывается у всех его смотрящих
5) кнопка позволяющая просматривать приватное видео удаляется при нажатии на неё


Чего там ещё надо покрутить для полного комильфо?

Отредактировано Pegass - 09.07.2012
1163
Денис @Анатолич
Pegass, Не поделитесь, как можно звук в вещаниях отключать?

2615
Сергей @Pegass
формально заменить swf по факту ещё и скрипт, если Дима не согласится заменить общий swf

**********

Посмотреть в работе можно у меня **********
Или тут **********


ЗЫ хотя по хорошему надо на этом заработать 😋 🐱‍👤

Отредактировано Pegass - 25.05.2012
1163
Денис @Анатолич
Жаль что нет регулировки звука. Но отключение намного лучше чем ничего. правда значек с матюгальником был бы намного информативнее чем OFF и ON В любом случае спасибо огромное за отключение звука. Если надо финансово, то думаю нужно сообщить номер WM чтобы желающие могли кинуть пожертвования. Кому скока не жалко.
Хотя это не мне решать.

2615
Сергей @Pegass
Ну уж извините, я не флешер)))

1163
Денис @Анатолич
Да к вам ваще никаких претензий Тока благодарности. Это я так, говорю как было бы лучше, вдруг будет возможность подправить.

467
Lexa @Like
Pegass пишет:

формально заменить swf по факту ещё и скрипт, если Дима не согласится заменить общий swf

**********

Посмотреть в работе можно у меня **********
Или тут **********


ЗЫ хотя по хорошему надо на этом заработать 😋 🐱‍👤

прикольно получилось, настройкой для камеры не поделишься да?

2615
Сергей @Pegass
Добавлен простенький и неказистый регулятор громкости(извиняйте, но дизайнер из меня хреновый, да и флешер тоже не очень)
Взять по прежнему можно тут **********
ну а посмотреть пока только тут **********

Отредактировано Pegass - 05.06.2012
20090
Dimitry @Dimitry
нету там регулятора, только он и офф

2615
Сергей @Pegass
Дим, так при просмотре, а не при вещании