Javascript — Tokbox один на один видео-вызов

Я работаю над процессом видеозвонков в Tokbox. Сейчас я использую пример набора Tokbox, который работает правильно, но показывает мне все активные видео пользователя.

но мне нужен один пользователь может видео звонить другому пользователю.

Я имею в виду, мне нужен процесс видеосвязи один на один. Возможно ли это в Tokbox. Поэтому, пожалуйста, помогите решить это.

Это мой код

use Slim\Slim;
use Gregwar\Cache\Cache;
use OpenTok\OpenTok;

if(!empty($userid))
{
$autoloader = __DIR__.'/../../../component/tokbox/vendor/autoload.php';
if (!file_exists($autoloader)) {
die('You must run `composer install` in the sample app directory');
}

require($autoloader);// PHP CLI webserver compatibility, serving static files
$filename = __DIR__.preg_replace('#(\?.*)$#', '', $_SERVER['REQUEST_URI']);
if (php_sapi_name() === 'cli-server' && is_file($filename)) {
return false;
}// Initialize Slim application
$app = new Slim(array(
'templates.path' => __DIR__
));

// Intialize a cache, store it in the app container
$app->container->singleton('cache', function() {
return new Cache;
});

// Initialize OpenTok instance, store it in the app contianer
$app->container->singleton('opentok', function () {
return new OpenTok('***', '****');
});
// Store the API Key in the app container
$app->apiKey = '45833942';
$id=$this->uri->segment('3');
$urlname=$this->uri->segment('4');
// Configure routes
$app->get('/home/livechat/'.$id.'/'.$urlname.'/', function () use ($app) {

// If a sessionId has already been created, retrieve it from the cache
$sessionId = $app->cache->getOrCreate('sessionId', array(), function() use ($app) {
// If the sessionId hasn't been created, create it now and store it
$session = $app->opentok->createSession();
return $session->getSessionId();
});

// Generate a fresh token for this client
$token = $app->opentok->generateToken($sessionId);

/*$this->db->select('activemember');
$this->db->from('pshy_videocat');
$psychics=$this->db->get();
$totaluseractive= $psychics->row();
$totalactivevideouser=$totaluseractive->activemember;*/?>

<input type="hidden" id="connectionCountField" value="0"></input>
<!--button onclick="myFunction()">Toggle Video</button-->
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.2.1.min.js"></script>
<script src="https://static.opentok.com/v2/js/opentok.js" charset="utf-8"></script>

<script charset="utf-8">
var publisher;
var connectionCount = 0;

var apiKey = '<?php echo '45833942'; ?>';
var sessionId = '<?php echo $sessionId; ?>';
var token = '<?php echo $token; ?>';

var subscribeoptions = {width: 664, height: 421, insertMode: 'append'}

var session = OT.initSession(apiKey, sessionId)
.on('streamCreated', function(event) {
session.subscribe(event.stream,'myPublisherDiv', subscribeoptions);
})
.connect(token, function(error) {

var publisherOptions = {
insertMode: 'append',
width: 150,
height: 150,
publishAudio:true,
publishVideo:true,
name: "You"};publisher = OT.initPublisher('mycam', publisherOptions);
session.publish(publisher);
});

session.on("connectionCreated", function(event) {
connectionCount++;
displayConnectionCount();
});

session.on("connectionDestroyed", function(event) {
connectionCount--;
displayConnectionCount();
});

function displayConnectionCount() {
document.getElementById("connectionCountField").value = connectionCount.toString();
/*var newdata=connectionCount.toString();
$.ajax({
url:$('#baseUrl').val()+"home/updateactiveuser",
type:'post',
data: {newdata:newdata}
})*/
}var enableVideo=true;

function myFunction() {
if(enableVideo)
{
publisher.publishVideo(false);
enableVideo=false;
} else
{
publisher.publishVideo(true);
enableVideo=true;
}
}
</script><?php
});

$app->run();
}
?>

Спасибо

0

Решение

Вот пример кода. Я не использовал SLIM для этого. Но это может быть сделано и с Slim. Я выполнил сценарий 5 раз & каждый раз я получал уникальный идентификатор сессии.

Идентификатор сеанса получен —

Session Id Got : 1_MX40NTgzMzk0Mn5-MTQ5NDMyMzQ0NzU0NH5KNk9Gcy9FSktPSlUwdldUbURwazJ0Umd-QX4
Session Id Got : 2_MX40NTgzMzk0Mn5-MTQ5NDMyMzQ3ODMzM35rWWU5NDV1ZjZPMGhLc3pCS3pRSERJY0h-QX4
Session Id Got : 1_MX40NTgzMzk0Mn5-MTQ5NDMyMzQ5NTcwOX5kc0Q3NDBjQSthOWJaMEk1eUllU3dCY0t-QX4
Session Id Got : 2_MX40NTgzMzk0Mn5-MTQ5NDMyMzUwNzExOH5NMEZuZWRyejBZYnZRVk1zSEczNldocmV-QX4
Session Id Got : 1_MX40NTgzMzk0Mn5-MTQ5NDMyMzUxNzE3NH5Yc0hyMUlacmFqK25pVzhXNDI5NTV6eDB-QX4

Ванильный PHP Script —

<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');

require 'vendor/autoload.php';
use OpenTok\OpenTok;

$apiKey = '45833942';
$apiSecret = '9727d4ae20e8695a8f787bc58c0b4a9ebf6aae6e';
$opentok = new OpenTok($apiKey, $apiSecret);

use OpenTok\MediaMode;
use OpenTok\ArchiveMode;// An automatically archived session:
$sessionOptions = array(
'archiveMode' => ArchiveMode::ALWAYS,
'mediaMode' => MediaMode::ROUTED
);
$session = $opentok->createSession($sessionOptions);// Store this sessionId in the database for later use
$sessionId = $session->getSessionId();echo "Session Id Got : $sessionId";

SLIM версия —

<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');

use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
use OpenTok\OpenTok;
use OpenTok\MediaMode;
use OpenTok\ArchiveMode;

require 'vendor/autoload.php';

$app = new \Slim\App;

$container = $app->getContainer();

$container['opentok'] = function ($c) {
$apiKey = '45833942';
$apiSecret = '9727d4ae20e8695a8f787bc58c0b4a9ebf6aae6e';

$opentok = new OpenTok($apiKey, $apiSecret);
return $opentok;
};$app->get('/', function (Request $request, Response $response) {
// An automatically archived session:
$sessionOptions = array(
'archiveMode' => ArchiveMode::ALWAYS,
'mediaMode' => MediaMode::ROUTED
);
$session = $this->opentok->createSession($sessionOptions);

// Store this sessionId in the database for later use
$sessionId = $session->getSessionId();

$response->getBody()->write("Session Id Got : $sessionId");
return $response;
});

$app->run();

Надеюсь, это тебе поможет.

Ref: https://tokbox.com/developer/sdks/php/

1

Другие решения

Похоже, вы основали свой код на OpenTok Hello World пример PHP. Этот образец написан для поддержки только одного сеанса, в демонстрационных целях. Ваша проблема здесь в том, что вы восстановить тот же ключ (sessionId) из кеша каждый раз, что делает образец.

Вы близки. Самый простой способ распространить этот пример на несколько сеансов — сохранить новые идентификаторы сеансов в кеше в виде разных ключей. Вам нужно изменить свой код, чтобы использовать другой ключ для хранения и получения идентификатора сессии. Таким образом, вы можете изменить логику поиска в кеше:

<?php
$sessionId = $app->cache->getOrCreate('sessionId', array(), function() use ($app) {
# ...
}
?>

что-то вроде:

<?php
# Here we add `$id` from the URI segment to create a unique key
# Notice the change in the key name to `'session' . $id'`
$sessionId = $app->cache->getOrCreate('session' . $id, array(), function() use ($app) {
# ...
}
?>

Проще всего, ваш код должен сопоставить идентификатор чата вашего приложения с внутренним сеансом OpenTok. Каждый раз, когда вы запрашиваете новый идентификатор livechat, он создает новый сеанс OpenTok и сохраняет новый идентификатор сеанса OpenTok для этого идентификатора livechat.

Итак, у вас должно быть два разных сеанса, если вы запросите:

  • /home/livechat/foo/bar
  • /home/livechat/baz/bar

бонус

Краткий совет по созданию сеансов OpenTok: это все, что вам нужно для создания нового сеанса с использованием OpenTok PHP SDK:

<?php
use OpenTok\OpenTok;
$apiObj = new OpenTok($API_KEY, $API_SECRET);

# This function creates an OpenTok session and returns a new session ID
function createOTSession() {
$session = $apiObj->createSession(array('mediaMode' => MediaMode::ROUTED));
return $session->getSessionId();
}
?>

Каждый раз, когда вы звоните $apiObj->createSession(), он создает новый сеанс, и вы можете получить доступ к идентификатору сеанса, позвонив getSessionId() на возвращенном объекте. Если у вас есть такая функция, как createOTSession() выше, вы можете вызвать эту функцию из маршрута, который должен создать новые сеансы.

Увидеть: Создание сессий OpenTok в PHP

0

По вопросам рекламы [email protected]