Membuat VideoCall dengan Api Bistri

Assalamualaikum Wr. Wb. Selamat Siang semuanya kali ini kita akan membuat VideoCall dengan menggunakan Api Bistri, dengan Api ini kita tidak usah bersusah-susah membuat engine videocall dari awal seperti postingan sebelumnya baca:cara mengakses kamera webcam dari web dengan javascript karena Api ini siap pakai. Untuk menggunakan Api ini anda harus registrasi dulu di api.developers.bistri.com/signup kemudian setelah terdaftar sekarang buat aplikasi baru, klik di menu applications->create new application

selanjunya masukan nama aplikasi anda lalu klik create new key
kunci aplikasi akan dikirimkan ke email anda, buka email anda untuk melihat appId & appKey

Selanjutnya setelah mendapatkan appId & appKey masukan pada script ini


<html>
<head>
    <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>

  <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
 <title></title>
 <script type="text/javascript" src="https://api.bistri.com/bistri.conference.min.js"></script>

 <script type="text/javascript">
  /*
    JS library reference:
    http://developers.bistri.com/webrtc-sdk/js-library-reference
*/

var room;
var members;
var localStream;

// when Bistri API client is ready, function
// "onBistriConferenceReady" is invoked
onBistriConferenceReady = function () {

    // test if the browser is WebRTC compatible
    if ( !bc.isCompatible() ) {
        // if the browser is not compatible, display an alert
        alert( "your browser is not WebRTC compatible !" );
        // then stop the script execution
        return;
    }

    // initialize API client with application keys
    // if you don't have your own, you can get them at:
    // https://api.developers.bistri.com/login
    bc.init( {
        "appId": "Maukan AppId disini",
        "appKey": "Masukan App Key disini"
    } );
   
    /* Set events handler */

    // when local user is connected to the server
    bc.signaling.bind( "onConnected", function () {
        // show pane with id "pane_1"
        showPanel( "pane_1" );
    } );

    // when an error occured on the server side
    bc.signaling.bind( "onError", function ( error ) {
        // display an alert message
        alert( error.text + " (" + error.code + ")" );
    } );

    // when the user has joined a room
    bc.signaling.bind( "onJoinedRoom", function ( data ) {
        // set the current room name
        room = data.room;
        members = data.members;
        // ask the user to access to his webcam
        bc.startStream( "webcam-sd", function( stream ){
            // affect stream to "localStream" var
            localStream = stream;
            // when webcam access has been granted
            // show pane with id "pane_2"
            showPanel( "pane_2" );
            // insert the local webcam stream into div#video_container node
            bc.attachStream( stream, q( "#video_container" ), { mirror: true } );
            // then, for every single members present in the room ...
            for ( var i=0, max=members.length; i<max; i++ ) {
                // ... request a call
                bc.call( members[ i ].id, room, { "stream": stream } );
            }
        } );
    } );

    // when an error occurred while trying to join a room
    bc.signaling.bind( "onJoinRoomError", function ( error ) {
        // display an alert message
       alert( error.text + " (" + error.code + ")" );
    } );
   
    // when the local user has quitted the room
    bc.signaling.bind( "onQuittedRoom", function( room ) {
        // stop the local stream
        bc.stopStream( localStream, function(){
            // remove the stream from the page
            bc.detachStream( localStream );
            // show pane with id "pane_1"
            showPanel( "pane_1" );
        } );
    } );
   
    // when a new remote stream is received
    bc.streams.bind( "onStreamAdded", function ( remoteStream ) {
        // insert the new remote stream into div#video_container node
        bc.attachStream( remoteStream, q( "#video_container_2" ) );
    } );
   
    // when a remote stream has been stopped
    bc.streams.bind( "onStreamClosed", function ( stream ) {
        // remove the stream from the page
        bc.detachStream( stream );
    } );
   
    // when a local stream cannot be retrieved
    bc.streams.bind( "onStreamError", function( error ){ 
        switch( error.name ){
            case "PermissionDeniedError":
                alert( "Webcam access has not been allowed" );
                bc.quitRoom( room );
                break
            case "DevicesNotFoundError":
                if( confirm( "No webcam/mic found on this machine. Process call anyway ?" ) ){
                    // show pane with id "pane_2"
                    showPanel( "pane_2" );
                    for ( var i=0, max=members.length; i<max; i++ ) {
                        // ... request a call
                        bc.call( members[ i ].id, room );
                    }
                }
                else{
                    bc.quitRoom( room ); 
                }
                break
        }
    } );

    // bind function "joinConference" to button "Join Conference Room"
    q( "#join" ).addEventListener( "click", joinConference );
   
    // bind function "quitConference" to button "Quit Conference Room"
    q( "#quit" ).addEventListener( "click", quitConference );
   
    // open a new session on the server
    bc.connect();
}

// when button "Join Conference Room" has been clicked
function joinConference(){
    var roomToJoin = "vineet";
    // if "Conference Name" field is not empty ...
    if( roomToJoin ){
        // ... join the room
        bc.joinRoom( roomToJoin );
    }
    else{
        // otherwise, display an alert
        alert( "you must enter a room name !" )
    } 
}

// when button "Quit Conference Room" has been clicked
function quitConference(){
    // quit the current conference room
    bc.quitRoom( room );
}

function showPanel( id ){
    var panes = document.querySelectorAll( ".pane" );
    // for all nodes matching the query ".pane"
    for( var i=0, max=panes.length; i<max; i++ ){
        // hide all nodes except the one to show
        panes[ i ].style.display = panes[ i ].id == id ? "block" : "none";
    };
}

function q( query ){
    // return the DOM node matching the query
    return document.querySelector( query );
}
 </script>
 <style type="text/css">
   #video_container{
      
                margin: 20px;
                text-align: center;
                width:100px;
                height:50px;
                position:absolute;
                top:150px;
                left: 150px;
                z-index: 1;
   }
            #video_container_2{
               
                margin: 20px;
                text-align: center;
                width:800px;
                height:800px;
                position:absolute;
                top:250px;
                left: 200px;
            }
           
   video {
       width: 100%;
   }
            body{
            background-color:#E6E6FA;
            }         
            .container-fluid{
            background-image: linear-gradient(90deg, #4b6cb7, #182848);
            }


 </style>
</head>
<body>
    <div class="container-fluid" style="height:100px ">
            <div>
                <h1 class="col-sm-12 col-lg-9" style="top:25%"><strong><em>Video Call</strong></em></h1>
            </div>
            <div class="col-sm-12 col-lg-3" style="position:relative; top:25%; right:5%;"></div>
     </div>
    <div class="pane" id="pane_1" style="display: block">

        <br>
        <div class="container"><input type="button" value="Make Video Call" id="join" class="btn btn-lg btn-success"></div>
       
    </div>
   
    <div class=" pane" id="pane_2" style="display: none">
        <div id="video_container"></div>
        <div id="video_container_2"></div>
        <input type="button" value="Quit Conference Room" id="quit" class="btn btn-danger btn-default btn-block">
    </div>
</body>
</html>

Selanjutnya tes di browser, jika berhasil melakukan video call hasilnya seperti ini:


Ok sekianlah tutorial kali ini selamat mencoba, jika ada yang ditanyakan silakan kirimkan pertanyaan anda pada kolom komentar dibawah, jika artikel ini bermanfaat silakan di share

Membuat Popup Image



Selamat Siang kali ini kita akan membagikan script  popup image menggunakan CSS dan JQuery, popup image  yaitu menampilkan gambar dengan ukuran yang lebih besar ketika di klik. script ini bisa anda pakai untuk membuat gallery gambar.

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Popup Image</title>
    <script src="js/jquery-2.2.0.min.js" charset="utf-8"></script>
    <style media="screen">
      body { width: 100%; height: 100%; background: grey; margin: 0; }
      main { width: 100%; height: 100%; position: absolute; }
      #my_image {width: 200px; margin: 20px; cursor: zoom-in;}
      #my_image:hover {opacity: 0.7;}
      #appear_image_div {width: 100%; height: 100%; position: absolute; z-index: 10; opacity: 0.7; background: #002447;}
      #appear_image {display: block; margin: auto; position: relative; z-index: 11; top: 20px;}
      #close_image {position: fixed; z-index: 12; top: 20px; right: 20px; cursor: pointer;
      font-family: sans-serif; color: #fff; font-size: 15pt;}
      #close_image:hover{opacity: 0.7;}
    </style>
    <script type="text/javascript">
      jQuery(function($){
        $('#my_image').click(function(){
          var img = $(this).attr("src");
          var appear_image = "<div id='appear_image_div' onclick='closeImage()'></div>";
          appear_image = appear_image.concat("<img id='appear_image' src='"+img+"' />");
          appear_image = appear_image.concat("<div id='close_image' onclick='closeImage()'>x</div>");
          $('body').append(appear_image);
        });
      });
      function closeImage() {
        $('#appear_image_div').remove();
        $('#appear_image').remove();
        $('#close_image').remove();
      }
    </script>
  </head>
  <body>
    <main>
      <img src="perahu.jpg" id="my_image">
    </main>
  </body>
</html>


Itu dia scriptnya selamat mencoba, jika artikel ini bermanfaat silakan share. jika ada yang kurang jelas silakan ditanyakan pada kolom komentar dibawah

Cara menambahkan ikon di android studio tanpa download

Hi sobat blogger, kali ini saya akan membagikan tips menambahkan ikon pada android studio tanpa mendownloadnya dari luar. tips ingin berguna bagi yang belum tahu aja karena biasanya ketika kita ingin menambahkan ikon kita mencari dulu ikonnya dari internet kemudian kita pindahkan ke file drawable, namun ada cara yang cepat jika anda menggunakan android studio 2.2 ke atas ikon-ikon material design bawaan google sudah di include kan ke dalam android studio.


Caranya adalah ketika kita mau membuat ikon di drawable misalnya kita klik kanan folder drawable kemudian pilih new->vector asset


kemudian pada gambar icon android kita klik dan akan muncul icon-icon yang siap kita gunakan, ada beberapa kategori disitu kita juga bisa mencai ikon di pencarian.


pilih salah satu ikon yang ingin ditambahkan kemudian klik ok kita juga bisa mengganti warna ikon sesaui keinginan kita.


sekianlah sedikit tips kali ini, semoga bermanfaat jika artikel ini bermanfaat silakan di share ke teman anda

Tips Mendengarkan Spotify Seperti Premium


Mendengarkan musik di spotify memang menyenagkan karena kualitas suaranya tinggi dan juga musiknya asli, daripada download lagu dari internet yang bajakan. namun jika kita tidak berlangganan kita tidak bisa bebas memindahkan lagu sesuai keinginan kita. untuk mengatasinya adalah hubungkan spotify anda ke komputer atau ke tv. fitur ini sangat keren karena handphone kita bisa dijadikan sebagai remotenya, pindahkan dari handphone dengarkan di komputer, selain itu dengan mengaktifkan fitur ini kita bisa bebas memindahkan lagu sesuai keinginan kita tanpa batas, dan juga fitur acak bisa dinonaktifkan. hampir sama dengan premium bedanya iklan tetap ada dan lagu tidak bisa di download, namun kita dapat bebas memindahkan lagu, sebelumnya, selanjunya, mengulang lagu, di acak atau tidak diacak. dan jika ada lagu yang ingin banget di dengerin bisa langsung di play.

Spotify bisa menjadi teman kita saat ngoding atau saat bersantai, saat diperjalanan atau saat akan tidur, koleksi lagunya lengkap banget bahkan lagu-lagu lawas pun ada jika anda ingin mendengarkan lagu lawas anda bisa membuka playlist yang saya buat di tautan ini

itulah tips mendengarkan musik di spotify seperti premium, jika ada yang ditambahkan silakan tulis pada komentar dibawah, jika artikel ini bermanfaat silakan di share. terimakasih

Membuat sistem Notifikasi Menggunakan PHP, AJAX dan Bootstrap

Pada kesempatan ini kita akan membahas tentang sistem notifikasi dengan menggunakan PHP, AJAX dan Bootstrap, sistem notifikasi ini bisa anda terapkan pada aplikasi / projek anda.



 langsung saja untuk membuatnya seperti biasa buat dulu html nya seperti berikut:
<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>Popup Notification Like Facebook using PHP AJAX Bootstrap</title>

<script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" charset="utf-8"></script>

<style media="screen">

        #alert-popover

        {

        display: block;

        position: absolute;

        bottom: 50px;

        left: 50px;

        }

        .wrapper

        {

        display: table-cell;

        vertical-align: bottom;

        height: auto;

        width: 200px;

        }

        .alert-default

      {

              color: #333333;

              background: #f2f2f2;

              border-color: #cccccc;

              }

</style>

</head>

<body>

<br/><br/>

<div class="container">

<br>

<h2>Facebook Style Notification Using PHP Ajax & Bootstrap</h2>

<br>

<!-- Form  -->

<form id="comment_form" method="post">

<div class="form-group">

<label>Enter Subject</label>

<input type="text" name="subject" id="subject" class="form-control"/>

</div>

<div class="form-group">

<label>Enter Comment</label>

<textarea name="comment" id="comment" class="form-control"></textarea>

</div>

<div class="form-group">

<input type="submit" name="post" id="post" class="btn btn-info" value="Post"/>

</div>

</form>

<!-- Form berakhir disini  -->



<div id="alert-popover">

<div class="wrapper">

<div class="content">



</div>

</div>

</div>

</div>

</body>

</html>



<script>

  $(document).ready(function(){



          setInterval(function(){

          load_last_notification();

          }, 10000);



          function load_last_notification()

          {

          $.ajax({

          url:"fetch.php",

          method:"POST",

          success:function(data)

          {

          $('.content').html(data);

          }

          })

          }



          $('#comment_form').on('submit', function(event){

          event.preventDefault();

          if ($('#subject').val() != '' && $('#comment').val() != '')

          {

          var form_data = $(this).serialize();

          $.ajax({

          url:"insert.php",

          method:"POST",

          data:form_data,

          success:function(data)

          {

          $('#comment_form')[0].reset();

          }

          })

          }

          else

          {

          alert("Both Fields are Required");

          }

          });

          });

</script>

kemudian buat file PHP untuk menyimpan datanya seperti berikut:
<?php



        //insert

        if (isset($_POST["subject"]))

        {

        $connect = mysqli_connect("localhost", "root", "", "notification");

        $subject = mysqli_real_escape_string($connect, $_POST["subject"]);

        $comment = mysqli_real_escape_string($connect, $_POST["comment"]);



        $query = "INSERT INTO comments(comment_subject, comment_text) VALUES ('$subject', '$comment')";

        mysqli_query($connect, $query);

}

lalu buat lagi file php untuk mengambil datanya, file ini yang akan menampilkan notifikasinya dalam bentuk alert dialog:
<?php

    error_reporting(0);



//

$connect = mysqli_connect("localhost", "root", "", "notification");

        $query = "SELECT * FROM comments WHERE comment_status = 0 ORDER BY comment_id DESC";

        $result = mysqli_query($connect, $query);



        while ($row = mysqli_fetch_array($result))

        {

        $output .= '

<div class="alert alert-default">

<a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>

<p><strong>'.$row["comment_subject"].'</strong>

<small><em>'.$row["comment_text"].'</em></small>

</p>

</div>

        ';

        }



        $update_query = "UPDATE comments SET comment_status = 1 WHERE comment_status = 0";

        mysqli_query($connect, $update_query);

        echo $output;

terakhir untuk tabel databasenya seperti berikut:
-- phpMyAdmin SQL Dump
        -- version
4.5.1
       
-- http://www.phpmyadmin.net
       
--
        -- Host:
127.0.0.1
       
-- Generation Time: 26 Sep 2017 pada 00.17
       
-- Versi Server: 10.1.16-MariaDB
        -- PHP Version:
5.6.24

       
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
        SET time_zone =
"+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

        --
        -- Database: `notification`
        --

        -- --------------------------------------------------------

        --
        -- Struktur dari tabel `comments`
        --

        CREATE TABLE `comments` (
        `comment_id`
int(11) NOT NULL,
        `comment_subject` varchar(
100) NOT NULL,
        `comment_text` varchar(
255) NOT NULL,
        `comment_status`
int(1) NOT NULL DEFAULT '0'
       
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

        --
        -- Dumping data untuk tabel `comments`
        --

        INSERT INTO `comments` (`comment_id`, `comment_subject`, `comment_text`, `comment_status`) VALUES
        (
1, 'peter send you a message', 'hello friend, how are you?', 1),
        (
2, 'hello friend, how are you?', 'hhhi', 1),
        (
3, 'hi', 'hello', 1),
        (
4, 'hi', 'hi', 1),
        (
5, 'peter parker send you a message', 'hi jhon ', 1),
        (
6, 'you have a friend request from jhon', 'jhon: do you a friend', 1),
        (
7, 'parker send you a message', 'Nice to meet you', 1);

        --
        -- Indexes
for dumped tables
        --

        --
        -- Indexes
for table `comments`
        --
        ALTER TABLE `comments`
        ADD PRIMARY KEY (`comment_id`);

        --
        -- AUTO_INCREMENT
for dumped tables
        --

        --
        -- AUTO_INCREMENT
for table `comments`
        --
        ALTER TABLE `comments`
        MODIFY `comment_id`
int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=8;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;


silakan jalankan program anda jika ada yng kurang jelas silakan ditanyakan, jika artikel ini bermanfaat silkan di share, anda juga bisa melihat demo notifikasi ini pada tautan di bawah. terimakasih sudah mampir ke blog kami.