Eval Streaming

Embed Size (px)

Citation preview

  • 8/2/2019 Eval Streaming

    1/49

    ANGLIA RUSKIN UNIVERSITY

    Implementing RTP and

    RTSP protocol For VideoStreaming In JAVA Based

    Chat Application

  • 8/2/2019 Eval Streaming

    2/49

    Page 2

    Contents1. Introduction........................................................................................................................................... 5

    1.1. Media Streaming ........................................................................................................................... 6

    1.2. Motivation and Problem Statement............................................................................................... 6

    1.3. Case Study .................................................................................................................................... 7

    1.4. Project Scope ................................................................................................................................ 8

    1.5. Project Objectives ......................................................................................................................... 8

    2. Literature Review.................................................................................................................................. 9

    2.1. File Formats .................................................................................................................................. 9

    2.2. Streaming Methods ....................................................................................................................... 9

    2.2.1. Downloading......................................................................................................................... 9

    2.2.2. Progressive Downloading ................................................................................................... 102.2.3. Streaming Servers ............................................................................................................... 10

    2.3. Streaming Video Servers ............................................................................................................ 12

    2.3.1. RTP Protocol....................................................................................................................... 12

    2.3.2. Real Time Protocol ............................................................................................................. 14

    3. Methodology ....................................................................................................................................... 15

    4. Implementation ................................................................................................................................... 17

    5. References........................................................................................................................................... 19

    Appendix..................................................................................................................................................... 21

  • 8/2/2019 Eval Streaming

    3/49

    Page 3

  • 8/2/2019 Eval Streaming

    4/49

    Page 4

    Table Of Figures

    Figure 1: RTSP protocol Over UDP Stream. .................................Error! Bookmark not defined.

    Figure 2: RTSP over RTP transport Protocol ................................................................................. 8

    Figure 3: Live Streaming Server ................................................................................................... 10

    Figure 4: Video On Demand Streaming Server ............................................................................ 11

    Figure 5: RTSP Communication States ........................................................................................ 13

    Figure 6: Chat Page ....................................................................................................................... 17

  • 8/2/2019 Eval Streaming

    5/49

    Page 5

    1.

    IntroductionMedia streaming is a multimedia that is sent over a network and played as it is being received by

    end user (Amir, 2011). Users do not need to wait to download all the media before playback but

    instead they can play it simultaneously while the media is delivered by the provider. Video-over-

    IP applications have recently attracted a large number of users on the Internet. Traditional client-

    server based video streaming solutions incur expensive bandwidth provision cost on the server

    (Wu and Li, 2011). Therefore there is a need to constantly research into these platforms in order

    to provide a cost effective and efficient means of sharing video. With the explosive growth of

    video applications over the Internet, many approaches have been proposed to stream video

    effectively over packet switched best-effort networks. A number of these use techniques from

    source and channel coding, or implement transport protocols, or modify system architectures in

    order to deal with delay, loss, and time-varying nature of the Internet (Nguyen, 2012).

    Video streaming over best-effort, packet-switched networks is challenging due to a number of

    factors such as high bit rates, delay, and loss sensitivity. As such, transport protocols such as

    TCP are not suitable for streaming applications. Conventionally, multimedia streaming

    applications in the Internet run over UDP instead of TCP due to the following reasons (Jinyao,

    Wolfgang and Bernhard, 2010).

    TCP uses the Additive increase multiplicative decrease (AIMD) algorithm for congestioncontrol. This algorithm leads to a varying throughput of real time video stream and hence

    severely impacts the video quality.

    TCP applies packet retransmission to guarantee the delivery of packets. But ultimately,such packets may arrive too late for playback and therefore be useless. . To this end,many solutions have been proposed from different perspectives. From source coding

    perspective, layered and error-resilient video codecs have been proposed.

  • 8/2/2019 Eval Streaming

    6/49

    Page 6

    1.1. Media StreamingTraditional client-server based video streaming solutions incur expensive bandwidth provision

    cost on the server and therefore these models are not optimized for real time online video

    streaming services. The client server model is not highly scalable and is prone to a single point of

    failure problem. Providing a scalable streaming service, which is resistant and resilient to failure,

    is very expensive in terms of bandwidth, therefore traditionally most streaming services are

    delivered through distributed servers content delivery network (CDN) or P2P networks.

    This trend has been reversing for over 2 years because the web speed is increasing exponentially.

    With the imminent worldwide deployment of 4G broadband internet services bandwidth

    constraint might be totally alleviated.

    Peer-to-Peer (P2P) networking is a time tested paradigm to build distributed network

    applications. Recently, several P2P streaming systems (e.g. Sopcast, P2PStream) have been

    deployed to provide live and on-demand video streaming services on the Internet at low server

    cost. In Live Media Streaming, the streams are only available at one particular time; while in

    video on demand (VoD) streams, the streams are stored on a server and are available to be

    transmitted at a user's request. It provides a large subset of VCR functionality, e.g., pause, fast

    forward, fast rewind (Amir, 2011).

    1.2. Motivation and Problem StatementVideo streaming is set to experience explosive growth in the coming years. According to Cisco

    VNI report (2011) by 2012 Internet video will account for over 50 percent of consumer Internet

    traffic and this will increase to 62% by 2015; the various forms of video the internet now carries

    TV, VoD, Internet Video, and P2Pwill account for 91 per cent of consumer traffic.

  • 8/2/2019 Eval Streaming

    7/49

    Page 7

    Streaming video has overtaken the popularity of P2P networks because as web speed is

    increasing, so will the amount of streaming. Rather than concentrate on P2P file sharing, the

    video service that will be developed in this project will be an Internet video streaming service.

    This project provides an excellent opportunity to research into how video is being deployed over

    the internet as a web application.

    1.3. Case StudyThe project to be designed is a java based chat server. Although a lot of java based cha server has

    been built, none is available that is capable of streaming live video using RTP and RTSP

    protocol. This is mainly due to copyright protection laws; therefore the project will be for purely

    academic and experimental purposes rather than commercial value. There are various ways by

    which video can be streamed online but this thesis will focus on the use of the Java RTP and

    RTSP protocol available in recent releases of java suite.

  • 8/2/2019 Eval Streaming

    8/49

    Page 8

    Figure 1: RTSP over RTP transport Protocol

    1.4. Project ScopeThere are two main methods of streaming video: Streaming Server and HTTP Streaming. This

    project is a web based video streaming service based on a streaming server implementing RTP

    protocol so the end user can start watching the file almost as soon as it begins downloading and

    therefore be used to broadcast live events or used to share recorded video at. Other forms of

    video streaming like P2P, progressive downloading will not be implemented but will be

    discussed.

    1.5. Project ObjectivesThe objectives of this thesis are listed below

    To create a social networking tool that people can use to share memorable fun timebetween themselves.

    Build a java based chat server that can be supported on different operating system. Build a Video streaming server into the chat application. The chat server will also have file sharing features.

  • 8/2/2019 Eval Streaming

    9/49

    Page 9

    2. Literature ReviewAs discussed in Section 1 above, there are two main methods of deploying video to viewers over

    the internet. These methods are Download and video streaming. This section covers the different

    types of video streaming on the internet with particular emphasis Streaming servers and HTTP

    streaming. The main focus will be on the architecture of these methods and how they affect the

    efficiency and quality of deployment in different operating systems.

    Two things are of utmost importance when creating a streaming service and these are the

    video file format and the streaming method. This is video players generally do not play all

    available formats. It is therefore necessary to sometimes include multiple players or multiple file

    formats based on user preference.

    2.1. File FormatsThere are many video file formats to choose from when creating video streams. A wide range of

    video formats, use different codecs to encode and compress video data and they also have their

    own file formats with different extensions like .swf, .wmv, .mp3, and .mp4. The MP4 format is

    the most widely used format on internet video because it is supported by YouTube, Flash players

    and HTML5 (w3schools, 2012). In order to reach the widest audience, it is sometimes imperative

    to create separate files for the different formats. But this is not practically feasible

    2.2. Streaming MethodsThere are two ways to view media on the internet (such as video, audio, animations,

    etc): Downloading and streaming.

    2.2.1. DownloadingMedia downloading is a form of file access which has some pros and cons. When a file is

    downloaded, the entire file is saved on the computer before a user can have access and view the

    files. Video files accessed this way has the advantage that a user can have such as quicker access

    to different parts of the file; the big disadvantage is that user have to wait for the whole file to

    downloaded before any of it can be viewed. For small files, this might constitute a small

    inconvenience but if the files are large, the delay is unacceptable.

    The easiest way to provide downloadable video files is to use a simple hyperlink to the file. A

    slightly more advanced method is to embed the file in a web page using special HTML code.

  • 8/2/2019 Eval Streaming

    10/49

    Page

    10

    2.2.2. Progressive DownloadingProgressive downloading or pseudo streaming is another common delivery method on the

    internet for multimedia objects. It has the same nature of downloading, but provides an option on

    the client side to play the object while it is being downloaded rather than wait for the whole

    video file to download. Most media players, such as Windows Media Player and Real Player,

    support the pseudo streaming mechanism (Lei et al, 2005). A major limit of pseudo streaming

    appears when the downloading connection is slow and cannot catch up with the playback speed.

    Users cannot jump forward in the stream since the file is downloaded in sequence. This method

    therefore simulates true streaming, but doesn't have all the advantages because the client cannot

    control where and what to watch in the stream.

    2.2.3. Streaming ServersStreaming media works differently from downloading method since the client can start viewing

    or watching the file as soon as it begins downloading (Lei et al, 2005; Silverstone and Fourmaux

    2007; Amir, 2011). In effect, the file is sent to the user in a more or less constant stream, and the

    user watches it as it arrives. The obvious advantage with this method is that no waiting is

    involved. Streaming media has additional advantages such as being able to broadcast live events

    sometimes referred to as a webcast or netcast. True streaming video are delivered from a

    specialized streaming server. Various researches has proven and developed streaming as the

    most efficient method for delivery multimedia over the internet (Lei et al, 2005).

    Figure 2: Live Streaming Server1

    1Image Available at:http://www.bogotobogo.com/VideoStreaming/videostreaming_etc.php

    http://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.php
  • 8/2/2019 Eval Streaming

    11/49

    Page

    11

    With streaming, the playback of a media object can start shortly after the client receives the

    initial portion of the object from the streaming server. In addition, streaming provides clients

    with a variety of controls during playback, such as pause, rewind, jump, etc. This allows a client

    to start or stop the media stream easily at any time. Compared with downloading and pseudo

    streaming, the amount of data transferred in streaming is closest to what the client really needs.

    Because of its many advantages, streaming is used in various Internet applications today.

    Figure 3: Video On Demand Streaming Server2

    There have been many different researches into multimedia streaming. While Chesire et al

    (2001) measured the streaming media workload in a windows 2000 environment; Almeida et al

    (2001) analyzed the workload on the server in an educational environment. A more recent

    research by Fernandez et al (2011), focused on creating an adaptive and predictive architecture

    for streaming server with the aim of enhancing the overall video quality especially in

    environment with low internet bandwidth; by formulating a combination of innovative

    congestion control-aware mechanisms and filtering technique

    2Image culled from: http://www.bogotobogo.com/VideoStreaming/videostreaming_etc.php

    http://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.php
  • 8/2/2019 Eval Streaming

    12/49

    Page

    12

    2.3. Streaming Video ServersA streaming media or streaming video server is a specialized application which runs on an

    Internet server. This is often referred to as "true streaming", since other methods only simulate

    streaming. True streaming has advantages such as:

    The ability to handle much larger traffic loads. The ability to detect users' connection speeds and supply appropriate files automatically. The ability to broadcast live events.

    There are two ways to have access to a streaming server:

    1. Operate you own server (by purchasing or leasing)2. Sign up for a hosted streaming plan with an ISP (Internet Service Provider)

    Streaming video servers operate with the Real Time Streaming Protocol to deliver a constant

    video stream. This protocol is employed in this thesis and is described in details below.

    2.3.1. RTP ProtocolThe Real-Time Streaming Protocol (RTSP) is an application layer protocol that is used for the

    setup and control of the either a single or several time-synchronized streams of continuous media

    with real time properties. The protocol is used for establishing and controlling media sessions

    between end points. It is optimized for live data streams or stored clips which require on

    demand and/or real time delivery. It should be noted that RTSP does not typically deliver the

    continuous streams itself, but rather defines a medium of set of control for multiple data delivery

    and sessions; it provide a means for choosing the delivery channel which can be either TCP or

    UDP (multicast, unicast or broadcast) and also define the Real Time Protocol Delivery

    mechanism (Schulzrine et al, 2011). RTSP therefore serves as a control protocol, and as a

    jumping off point for negotiating transports and negotiating codecs off of servers in a file format

    independent way.

    http://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.php
  • 8/2/2019 Eval Streaming

    13/49

    Page

    13

    Figure 4: RTSP Communication States3

    An RTSP session can use multiple transport-level connection such as a TCP connection. During

    an RTSP session, a client may open and close multiple reliable transport layer connections to the

    server when issuing RTSP requests. Alternatively, it may use a connectionless transport protocol

    such as UDP (Vasquez-Brisneo and Vincent, 2007; rstp.org, 2007).

    The RTSP server in our architecture is written in Java using jdk1.6.0_25 distribution. It

    implements the basic RTSP mechanisms to control the streamed data, but once the session is

    established, media streams are sent using RTP over UDP as the transport mechanism as shown

    in the diagram below. Java's sophisticated memory management, native support

    for threading and concurrency, type safety, made it the program of choice to implement the

    server. UDP datagram sockets are established on port 25000. More intricate details and

    description are expostulated in Section 3 and Section 4.

    The streams created and instantiated by RTSP may use RTP, but the operation of RTSP does not

    depend on the transport mechanism used to transport the multimedia file. RTSP is intentionally

    similar in syntax and operation to HTTP/1.1 so that extension mechanisms to HTTP can in most

    cases also be added to RTSP. However the differences between HTTP/1.1 and RTSP are

    expounded below:

    3Available at: http://www.w3.org/2008/WebVideo/Fragments/wiki/UA_Server_RTSP_Communication

    http://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.php
  • 8/2/2019 Eval Streaming

    14/49

    Page

    14

    The protocol identifier in RTSP is different from that of HTTP/1.1. HTTP is stateless in nature while an RSTP server is a stateful server by default; although,

    this can be turned to

    RSTP requests can be initiated by both client and server nodes. Different protocols can be used to carry data in an RSTP connection. RTSP is defined to use ISO 10646 (UTF-8) rather than ISO 8859-1, consistent with

    current HTML internationalization efforts.

    The RTSP Request-URI always contains the absolute URI which is made up of path andhost name bundled together in a header field. HTTP/1.1 on the other hand carries only

    the absolute path in the request and puts the host name in a separate header field because

    of backward compatibility with a historical blunder.

    The protocol supports the following operations:

    Retrieval of media from media server: The client can request a presentation descriptionvia HTTP or some other method.

    Invitation of a media server to a conference: A media server can be "invited" to join anexisting conference, either to play back media into the presentation or to record all or a

    subset of the media in a presentation.

    Addition of media to an existing presentation: Particularly for live presentations, it isuseful if the server can tell the client about additional media becoming available.

    2.3.2. Real Time ProtocolThe real-time transport protocol (RTP) provides end-to-end delivery services for data with real-

    time characteristics, such as interactive audio and video or simulation data, over multicast or

    unicast network services. Applications typically run RTP on top of UDP to make use of its

    multiplexing and checksum services; both protocols contribute parts of the transport protocol

    functionality. However, RTP may be used with other suitable underlying network or transport

    http://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.php
  • 8/2/2019 Eval Streaming

    15/49

    Page

    15

    protocols. RTP supports data transfer to multiple destinations using multicast distribution if

    provided by the underlying network.

    RTP itself does not provide any mechanism to ensure timely delivery or provide other quality-of-

    service guarantees, but relies on lower-layer services to do so. It does not guarantee delivery or

    prevent out-of-order delivery, nor does it assume that the underlying network is reliable and

    delivers packets in sequence. The sequence numbers included in RTP allow the receiver to

    reconstruct the sender's packet sequence, but sequence numbers might also be used to determine

    the proper location of a packet, for example in video decoding, without necessarily decoding

    packets in sequence.

    RTP consists of two closely-linked parts:

    The real-time transport protocol (RTP), to carry data that has real-time properties. The RTP control protocol (RTCP), to monitor the quality of service and to convey

    information about the participants in an on-going session. The latter aspect of RTCP may

    be sufficient for "loosely controlled" sessions, i.e., where there is no explicit membership

    control and set-up, but it is not necessarily intended to support all of an application's

    control communication requirements.

    3. Methodology

    http://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.php
  • 8/2/2019 Eval Streaming

    16/49

    Page

    16

    http://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.php
  • 8/2/2019 Eval Streaming

    17/49

    Page

    17

    4. Implementation

    Figure 5: Chat Page

    http://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.php
  • 8/2/2019 Eval Streaming

    18/49

    Page

    18

    Sign-Up Page

    http://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.php
  • 8/2/2019 Eval Streaming

    19/49

    Page

    19

    5. ReferencesJinyao, Y., Wolfgang, M., Bernhard, P. 2012. Analytical Framework for Streaming over TCP.

    [ONLINE] Available at: http://people.ee.ethz.ch/~wmuehlba/new2an-2011.pdf. [Accessed 03

    February 2012].

    X. Hei, C. Liang, J. Liang, Y. Liu, and K. W. Ross. A Measurement Study of a Large-Scale P2P

    IPTV System.IEEE Transactions on Multimedia, 2007.

    Wu, C. and Li, B. (2011) Diagnosing Network-wide P2P Live Streaming Inefficiencies. ACM

    Transactions on Multimedia Computing, Communications and Applications,, 5 (2), p.1-21.

    L, C. and G, Y. (2012) A survey on peer-to-peer video streaming systems. PEER-TO-PEER

    NETWORKING AND APPLICATIONS, 1 (1), p.18-28.

    Nguyen, N. (2012) DISTRIBUTED VIDEO STREAMING OVER INTERNET. Ph,D.

    University Of California, Berkeley, USA.

    Amir , P. (2011) P2P Media Streamin. [online] Available at:http://www.sics.se/~amir/files/

    download /p2p/p2p_media_streaming_2011.pdf [Accessed: 4th February 2012].

    Cisco Incorporated (2012) Cisco Visual Networking Index: Forecast and Methodology, 2010

    2015. [online] Available at:http://www.cisco.com/en/US/solutions/collateral/ns341/ns525/ns537 /ns705/ns827/white_paper_c11-481360.pdf [Accessed: 5

    thFebruary 2012].

    3schools.com (2012) HTML Multimedia . [online] Available at:http://www.w3schools.com/

    html/ html_media.asp [Accessed: 22 Feb 2012].

    SIGMETRICS Perform. Eval. Rev., Vol. 36 (June 2008), pp. 313-324,

    doi:10.1145/1384529.1375493

    Silverston, T., Fourmaux. O. Measuring P2P IPTV Systems.In Proceedings of the 17thInternational workshop on Network and Operating Systems Support for Digital Audio & Video,

    2007.

    http://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://www.bogotobogo.com/VideoStreaming/videostreaming_etc.phphttp://people.ee.ethz.ch/~wmuehlba/new2an-2011.pdfhttp://www.sics.se/~amir/files/http://www.sics.se/~amir/files/http://www.sics.se/~amir/files/http://www.cisco.com/en/US/solutions/collateral/ns341/ns525/ns537http://www.cisco.com/en/US/solutions/collateral/ns341/ns525/ns537http://www.cisco.com/en/US/solutions/collateral/ns341/ns525/ns537http://www.w3schools.com/http://www.w3schools.com/http://www.w3schools.com/http://www.w3schools.com/http://www.cisco.com/en/US/solutions/collateral/ns341/ns525/ns537http://www.sics.se/~amir/files/http://people.ee.ethz.ch/~wmuehlba/new2an-2011.pdf
  • 8/2/2019 Eval Streaming

    20/49

    Page

    20

    Lei, G., Songqing, C., Zhen, X., Xiaodong, Z. (2005). Analysis of Multimedia Workloads with

    Implications for Internet Streaming.In: International World Wide Web Conference Committee

    (IW3C2), May 10-14, Chiba, Japan. pp.24-34.

    M. Chesire, A. Wolman, G. Voelker, and H. Levy. Measurement and analysis of a streaming

    media workload. In Proc. of the 3rd USENIX Symposium on Internet Technologies and Systems,

    March 2001.

    J. M. Almeida, J. Krueger, D. L. Eager, and M. K. Vernon. Analysis of educational media server

    workloads. In Proc. of ACM Workshop on Network and Operating System Support for Digital

    Audio and Video (NOSSDAV), June 2001.

    Michaelhanley.ie (2002)RTSP | E-Learning Curve Blog. [online] Available at:

    http://michaelhanley .ie/elearningcurve/tag/rtsp/ [Accessed: 17 Mar 2012].

    H. Schulzrinne (Oct 08 2011). 2326.Real Time Streaming Protocol 2.0 (RTSP). USA: IETF.

    Developer.apple.com (1997)Developer - QuickTime - Letters from the Ice Floe. [online]

    Available at: https://developer.apple.com/quicktime/icefloe/dispatch028.html [Accessed: 19 Mar

    2012].

    Vazquez-Briseno , M. and Vincent , P. (2007) IJCSNS International Journal of Computer

    Science and Network Security, September 2007.An Adaptable Architecture for Mobile

    Streaming Applications, 7 (9), p.32-38.

    rtsp.org (2007)Internet Archive Wayback Machine. [online] Available at: http://www.rtsp.org/

    [Accessed: 19 Mar 2012].

    W3.org (2012) UA Server RTSP Communication - Media Fragments Working Group Wiki.

    [online] Available at:

    http://www.w3.org/2008/WebVideo/Fragments/wiki/UA_Server_RTSP_Communication

    [Accessed: 19 Mar 2012].

  • 8/2/2019 Eval Streaming

    21/49

    Page

    21

    Appendix

    package javachat;

    import java.awt.event.ActionEvent;

    import java.awt.event.ActionListener;

    import java.awt.event.KeyEvent;

    import java.awt.event.KeyListener;

    import java.lang.String;

    import javax.swing.*;

    import java.sql.*;

    public class FriendList extends JFrame implements ActionListener

    {

  • 8/2/2019 Eval Streaming

    22/49

    Page

    22

    private Connection conn = null;

    private Statement st = null;

    private ResultSet resultSet = null;

    int n=7;

    String friends;

    String typed;

    public FriendList()

    {

    initComponents();

    connect();

    }

    public void connect()

    {

    try

    {

    String userName = "root";

    String password = "redhot";

    String url = "jdbc:mysql://localhost/sleeky";

    Class.forName ("com.mysql.jdbc.Driver").newInstance();

    conn = DriverManager.getConnection (url, userName, password);

    System.out.println ("Database connection established");

    }

  • 8/2/2019 Eval Streaming

    23/49

    Page

    23

    catch (Exception e)

    {

    System.err.println ("Cannot connect to database server");

    }

    read_freind();

    }

    public void read_freind()

    {

    try

    {

    st = conn.createStatement();

    st.executeQuery("select * from sleeky.fahad1");

    resultSet = st.getResultSet();

    while (resultSet.next ())

    {

    friends = new String(resultSet.getString("Friend"));

    jTextArea2.append(friends+"\n\n");

    }

    }

    catch(SQLException e)

    {

    e.printStackTrace();

  • 8/2/2019 Eval Streaming

    24/49

    Page

    24

    }

    }

    @SuppressWarnings("unchecked")

    //

    private void initComponents() {

    canvas1 = new java.awt.Canvas();

    jLabel1 = new javax.swing.JLabel();

    jLabel2 = new javax.swing.JLabel();

    jLabel3 = new javax.swing.JLabel();

    jLabel4 = new javax.swing.JLabel();

    jScrollPane1 = new javax.swing.JScrollPane();

    jTextArea1 = new javax.swing.JTextArea();

    jScrollPane2 = new javax.swing.JScrollPane();

    jTextArea2 = new javax.swing.JTextArea();

    jTextField1 = new javax.swing.JTextField();

    jMenuBar1 = new javax.swing.JMenuBar();

    jMenu1 = new javax.swing.JMenu();

    jMenuItem1 = new javax.swing.JMenuItem();

    jMenu4 = new javax.swing.JMenu();

    jMenu2 = new javax.swing.JMenu();

    jMenuItem2 = new javax.swing.JMenuItem();

    jMenuItem3 = new javax.swing.JMenuItem();

    jMenuItem4 = new javax.swing.JMenuItem();

  • 8/2/2019 Eval Streaming

    25/49

    Page

    25

    jMenu3 = new javax.swing.JMenu();

    jMenuItem5 = new javax.swing.JMenuItem();

    jMenuItem6 = new javax.swing.JMenuItem();

    jMenuItem7 = new javax.swing.JMenuItem();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jLabel1.setIcon(new

    javax.swing.ImageIcon(getClass().getResource("/javachat/Untitled.jpg"))); // NOI18N

    jLabel2.setIcon(new

    javax.swing.ImageIcon(getClass().getResource("/javachat/file_transfer.jpg"))); // NOI18N

    jLabel2.setText("File transfer");

    jLabel3.setIcon(new

    javax.swing.ImageIcon(getClass().getResource("/javachat/text_chat.jpg"))); // NOI18N

    jLabel3.setText("Chat");

    jLabel4.setIcon(new

    javax.swing.ImageIcon(getClass().getResource("/javachat/video_chat.jpg"))); // NOI18N

    jLabel4.setText("Share Video");

    jTextArea1.setColumns(20);

    jTextArea1.setRows(5);

    jScrollPane1.setViewportView(jTextArea1);

    jTextArea2.setColumns(20);

  • 8/2/2019 Eval Streaming

    26/49

    Page

    26

    jTextArea2.setEditable(false);

    jTextArea2.setRows(5);

    jScrollPane2.setViewportView(jTextArea2);

    jTextField1.addActionListener(new java.awt.event.ActionListener() {

    public void actionPerformed(java.awt.event.ActionEvent evt) {

    jTextField1ActionPerformed(evt);

    }

    });

    jMenu1.setText("Sleeky");

    jMenuItem1.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_

    Z, java.awt.event.InputEvent.CTRL_MASK));

    jMenuItem1.setText("Sign Out");

    jMenu1.add(jMenuItem1);

    jMenu4.setText("Close");

    jMenu1.add(jMenu4);

    jMenuBar1.add(jMenu1);

    jMenu2.setText("Contacts");

    jMenuItem2.setText("Add Contact");

  • 8/2/2019 Eval Streaming

    27/49

    Page

    27

    jMenu2.add(jMenuItem2);

    jMenuItem3.setText("Delete Contact");

    jMenu2.add(jMenuItem3);

    jMenuItem4.setText("Block Contact");

    jMenu2.add(jMenuItem4);

    jMenuBar1.add(jMenu2);

    jMenu3.setText("Call");

    jMenuItem5.setText("Video Chat");

    jMenu3.add(jMenuItem5);

    jMenuItem6.setText("Video Sharing");

    jMenu3.add(jMenuItem6);

    jMenuItem7.setText("Transfer File");

    jMenu3.add(jMenuItem7);

    jMenuBar1.add(jMenu3);

    setJMenuBar(jMenuBar1);

  • 8/2/2019 Eval Streaming

    28/49

    Page

    28

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());

    getContentPane().setLayout(layout);

    layout.setHorizontalGroup(

    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

    .addGroup(layout.createSequentialGroup()

    .addContainerGap()

    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

    .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 183,

    Short.MAX_VALUE)

    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)

    .addComponent(canvas1, javax.swing.GroupLayout.PREFERRED_SIZE,

    javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)

    .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 183,

    Short.MAX_VALUE)))

    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)

    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

    .addGroup(layout.createSequentialGroup()

    .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 110,

    javax.swing.GroupLayout.PREFERRED_SIZE)

    .addGap(26, 26, 26)

    .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 106,

    javax.swing.GroupLayout.PREFERRED_SIZE)

    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)

    .addComponent(jLabel4, javax.swing.GroupLayout.DEFAULT_SIZE, 106,

    Short.MAX_VALUE))

  • 8/2/2019 Eval Streaming

    29/49

    Page

    29

    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 358,

    Short.MAX_VALUE)

    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 346,

    javax.swing.GroupLayout.PREFERRED_SIZE))

    .addContainerGap())

    );

    layout.setVerticalGroup(

    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

    .addGroup(layout.createSequentialGroup()

    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

    .addComponent(canvas1, javax.swing.GroupLayout.PREFERRED_SIZE,

    javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)

    .addGroup(layout.createSequentialGroup()

    .addGap(36, 36, 36)

    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

    .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE,

    450, javax.swing.GroupLayout.PREFERRED_SIZE)

    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE,

    450, Short.MAX_VALUE))))

    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

    .addGroup(layout.createSequentialGroup()

    .addGap(14, 14, 14)

    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

  • 8/2/2019 Eval Streaming

    30/49

    Page

    30

    .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 33,

    javax.swing.GroupLayout.PREFERRED_SIZE)

    .addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 33,

    javax.swing.GroupLayout.PREFERRED_SIZE)

    .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 37,

    javax.swing.GroupLayout.PREFERRED_SIZE))

    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)

    .addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 60,

    Short.MAX_VALUE))

    .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 122,

    javax.swing.GroupLayout.PREFERRED_SIZE))

    .addContainerGap())

    );

    pack();

    }//

    private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {

    typed = jTextField1.getText();

    jTextArea1.append(typed+"\n");

    jTextField1.setText("");

    }

    // Variables declaration - do not modify

    private java.awt.Canvas canvas1;

  • 8/2/2019 Eval Streaming

    31/49

    Page

    31

    private javax.swing.JLabel jLabel1;

    private javax.swing.JLabel jLabel2;

    private javax.swing.JLabel jLabel3;

    private javax.swing.JLabel jLabel4;

    private javax.swing.JMenu jMenu1;

    private javax.swing.JMenu jMenu2;

    private javax.swing.JMenu jMenu3;

    private javax.swing.JMenu jMenu4;

    private javax.swing.JMenuBar jMenuBar1;

    private javax.swing.JMenuItem jMenuItem1;

    private javax.swing.JMenuItem jMenuItem2;

    private javax.swing.JMenuItem jMenuItem3;

    private javax.swing.JMenuItem jMenuItem4;

    private javax.swing.JMenuItem jMenuItem5;

    private javax.swing.JMenuItem jMenuItem6;

    private javax.swing.JMenuItem jMenuItem7;

    private javax.swing.JScrollPane jScrollPane1;

    private javax.swing.JScrollPane jScrollPane2;

    private javax.swing.JTextArea jTextArea1;

    private javax.swing.JTextArea jTextArea2;

    private javax.swing.JTextField jTextField1;

    // End of variables declaration

    public void actionPerformed(ActionEvent e)

  • 8/2/2019 Eval Streaming

    32/49

    Page

    32

    {

    throw new UnsupportedOperationException("Not supported yet.");

    }

    public static void main(String args[])

    {

    java.awt.EventQueue.invokeLater(new Runnable()

    {

    public void run()

    {

    new FriendList().setVisible(true);

    }

    });

    }

    }

    ServerChat.java

    package javachat;

    //~--- non-JDK imports --------------------------------------------------------

  • 8/2/2019 Eval Streaming

    33/49

    Page

    33

    import com.mysql.jdbc.Connection;

    //~--- JDK imports ------------------------------------------------------------

    import java.awt.event.ActionEvent;

    import java.awt.event.ActionListener;

    import java.awt.image.BufferedImage;

    import java.io.File;

    import java.io.IOException;

    import java.sql.*;

    import java.util.logging.Level;

    import java.util.logging.Logger;

    import javax.imageio.ImageIO;

    import javax.swing.*;

    /**

    *

    * @author Redhot

    */

  • 8/2/2019 Eval Streaming

    34/49

    Page

    34

    public class ServerFrame extends JFrame implements ActionListener {

    private Connection con = null;

    private ResultSet rs = null;

    private Statement st = null;

    // Variables declaration - do not modify

    private javax.swing.JButton jButton1;

    private javax.swing.JLabel jLabel1;

    private javax.swing.JLabel jLabel2;

    private javax.swing.JLabel jLabel3;

    private javax.swing.JTextField jTextField1;

    private javax.swing.JTextField jTextField2;

    private java.awt.Label label1;

    private java.awt.Label label2;

    private java.awt.Label label4;

    // End of variables declaration

    String user, upass;

    public ServerFrame() {

    initComponents();

    jButton1.addActionListener(new ActionListener() {

    public void actionPerformed(ActionEvent e) {

    connectData();

  • 8/2/2019 Eval Streaming

    35/49

    Page

    35

    }

    });

    }

    @SuppressWarnings("unchecked")

    //

    private void initComponents() {

    jLabel3 = new javax.swing.JLabel();

    label1 = new java.awt.Label();

    label2 = new java.awt.Label();

    label4 = new java.awt.Label();

    jLabel1 = new javax.swing.JLabel();

    jButton1 = new javax.swing.JButton();

    jLabel2 = new javax.swing.JLabel();

    jTextField1 = new javax.swing.JTextField();

    jTextField2 = new javax.swing.JTextField();

    jLabel3.setText("jLabel3");

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    setFont(new java.awt.Font("Andalus", 1, 18)); // NOI18N

    label1.setFont(new java.awt.Font("Dialog", 1, 12));

    label1.setText("Sleeky ID");

    label2.setFont(new java.awt.Font("Dialog", 1, 12));

    label2.setText("Sleeky Password");

    label4.setFont(new java.awt.Font("DilleniaUPC", 1, 14));

  • 8/2/2019 Eval Streaming

    36/49

    Page

    36

    label4.setForeground(new java.awt.Color(204, 0, 51));

    label4.setName("sleeky4Pass"); // NOI18N

    label4.setText("Forgot Your Password ?");

    jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/logo.jpg")));

    // NOI18N

    jLabel1.setName("logoLabel"); // NOI18N

    jButton1.setText("Login");

    jButton1.setName("submit"); // NOI18N

    jButton1.addActionListener(new java.awt.event.ActionListener() {

    public void actionPerformed(java.awt.event.ActionEvent evt) {

    jButton1ActionPerformed(evt);

    }

    });

    jLabel2.setFont(new java.awt.Font("DilleniaUPC", 1, 14)); // NOI18N

    jLabel2.setForeground(new java.awt.Color(153, 0, 0));

    jLabel2.setText("Get A Sleeky ID!");

    jLabel2.setName("sleekyID"); // NOI18N

    jLabel2.addMouseListener(new java.awt.event.MouseAdapter() {

    public void mouseClicked(java.awt.event.MouseEvent evt) {

    jLabel2MouseClicked(evt);

    }

    });

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());

  • 8/2/2019 Eval Streaming

    37/49

    Page

    37

    getContentPane().setLayout(layout);

    layout.setHorizontalGroup(

    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(

    layout.createSequentialGroup().addContainerGap().addGroup(

    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(

    layout.createSequentialGroup().addComponent(

    jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 167,

    javax.swing.GroupLayout.PREFERRED_SIZE).addContainerGap()).addGroup(

    layout.createSequentialGroup().addGroup(

    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING).addComponent(

    label4, javax.swing.GroupLayout.Alignment.LEADING,

    javax.swing.GroupLayout.DEFAULT_SIZE, 226,

    Short.MAX_VALUE).addComponent(

    label1, javax.swing.GroupLayout.Alignment.LEADING,

    javax.swing.GroupLayout.PREFERRED_SIZE, 169,

    javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(

    label2, javax.swing.GroupLayout.Alignment.LEADING,

    javax.swing.GroupLayout.PREFERRED_SIZE, 152,

    javax.swing.GroupLayout.PREFERRED_SIZE).addGroup(

    javax.swing.GroupLayout.Alignment.LEADING,

    layout.createParallelGroup(

    javax.swing.GroupLayout.Alignment.TRAILING,

  • 8/2/2019 Eval Streaming

    38/49

    Page

    38

    false).addComponent(

    jTextField1,

    javax.swing.GroupLayout.Alignment.LEADING).addComponent(

    jLabel1,

    javax.swing.GroupLayout.Alignment.LEADING,

    javax.swing.GroupLayout.PREFERRED_SIZE,

    226,

    Short.MAX_VALUE).addComponent(

    jTextField2,

    javax.swing.GroupLayout.Alignment.LEADING).addComponent(

    jButton1))).addGap(

    67,

    67,

    67)))));

    layout.setVerticalGroup(

    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(

    layout.createSequentialGroup().addGap(96, 96, 96).addComponent(

    jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 195,

    javax.swing.GroupLayout.PREFERRED_SIZE).addGap(27, 27,

    27).addComponent(

    label1, javax.swing.GroupLayout.PREFERRED_SIZE,

    javax.swing.GroupLayout.DEFAULT_SIZE,

    javax.swing.GroupLayout.PREFERRED_SIZE).addPreferredGap(

  • 8/2/2019 Eval Streaming

    39/49

    Page

    39

    javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(

    jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 30,

    javax.swing.GroupLayout.PREFERRED_SIZE).addGap(32, 32,

    32).addComponent(

    label2, javax.swing.GroupLayout.PREFERRED_SIZE,

    javax.swing.GroupLayout.DEFAULT_SIZE,

    javax.swing.GroupLayout.PREFERRED_SIZE).addPreferredGap(

    javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(

    jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, 31,

    javax.swing.GroupLayout.PREFERRED_SIZE).addGap(18, 18,18).addComponent(

    jButton1).addGap(41, 41, 41).addComponent(jLabel2).addGap(

    21, 21, 21).addComponent(

    label4, javax.swing.GroupLayout.PREFERRED_SIZE,

    javax.swing.GroupLayout.DEFAULT_SIZE,

    javax.swing.GroupLayout.PREFERRED_SIZE).addContainerGap(63,Short.MAX_VALUE)));

    jLabel2.getAccessibleContext().setAccessibleName("sleekyID");

    pack();

    } //

    private void jLabel2MouseClicked(java.awt.event.MouseEvent evt) {

    // TODO add your handling code here:

    }

  • 8/2/2019 Eval Streaming

    40/49

    Page

    40

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

    connectData();

    getValues();

    getUser();

    }

    public static void main(String args[]) {

    java.awt.EventQueue.invokeLater(new Runnable() {

    public void run() {

    new ServerFrame().setVisible(true);

    }

    });

    }

    public void connectData() {

    try {

    String userName = "root";

    String password = "redhot";

    String url = "jdbc:mysql://localhost/sleeky";

    Class.forName("com.mysql.jdbc.Driver").newInstance();

    con = (Connection) DriverManager.getConnection(url, userName, password);

    System.out.println("Database connection established");

    }

  • 8/2/2019 Eval Streaming

    41/49

    Page

    41

    catch (Exception e)

    {

    System.err.println("Cannot connect to database server");

    }

    }

    public void getValues()

    {

    user = new String(jTextField1.getText());

    upass = new String(jTextField2.getText());

    System.out.println(user);

    }

    public void getUser()

    {

    try

    {

    String s = "select username, password from table_users where username = '"+ user +

    "' and password = '"+upass+ "'";

    st = con.createStatement();

    rs=st.executeQuery(s);

    JOptionPane.showInputDialog("Im here");

    rs = st.getResultSet();

    while (rs.next())

    {

  • 8/2/2019 Eval Streaming

    42/49

    Page

    42

    System.out.println("Unable to getuser");

    }

    }

    catch (SQLException ex)

    {

    System.out.println("Unable to get catch");

    }

    }

    public void actionPerformed(ActionEvent e) {

    throw new UnsupportedOperationException("Not supported yet.");

    }

    }

    Signup.java

    /*

    * To change this template, choose Tools | Templates

    * and open the template in the editor.

    */

    /*

    * signup.java

    *

    * Created on Mar 11, 2012, 10:27:30 AM

    */

  • 8/2/2019 Eval Streaming

    43/49

    Page

    43

    package javachat;

    /**

    *

    * @author Redhot

    */

    public class signup extends javax.swing.JFrame {

    /** Creates new form signup */

    public signup() {

    initComponents();

    }

    /** This method is called from within the constructor to

    * initialize the form.

    * WARNING: Do NOT modify this code. The content of this method is

    * always regenerated by the Form Editor.

    */

    @SuppressWarnings("unchecked")

    //

    private void initComponents() {

    jLabel1 = new javax.swing.JLabel();

    jLabel2 = new javax.swing.JLabel();

  • 8/2/2019 Eval Streaming

    44/49

    Page

    44

    jLabel3 = new javax.swing.JLabel();

    jLabel4 = new javax.swing.JLabel();

    jLabel5 = new javax.swing.JLabel();

    jLabel6 = new javax.swing.JLabel();

    jTextField1 = new javax.swing.JTextField();

    jTextField2 = new javax.swing.JTextField();

    jTextField3 = new javax.swing.JTextField();

    jTextField4 = new javax.swing.JTextField();

    jTextField5 = new javax.swing.JTextField();

    jButton1 = new javax.swing.JButton();

    jLabel7 = new javax.swing.JLabel();

    jTextField6 = new javax.swing.JTextField();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jLabel1.setText("Use This Form To Sign Up");

    jLabel2.setText("First Name");

    jLabel3.setText("Last Name");

    jLabel4.setText("User Name");

    jLabel5.setText("Email");

  • 8/2/2019 Eval Streaming

    45/49

    Page

    45

    jLabel6.setText("Password");

    jButton1.setText("Submit");

    jLabel7.setText("Confirm Password");

    jTextField6.addActionListener(new java.awt.event.ActionListener() {

    public void actionPerformed(java.awt.event.ActionEvent evt) {

    jTextField6ActionPerformed(evt);

    }

    });

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());

    getContentPane().setLayout(layout);

    layout.setHorizontalGroup(

    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

    .addGroup(layout.createSequentialGroup()

    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

    .addGroup(layout.createSequentialGroup()

    .addGap(42, 42, 42)

    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

    .addComponent(jLabel2)

    .addComponent(jLabel3)

    .addComponent(jLabel4)

  • 8/2/2019 Eval Streaming

    46/49

    Page

    46

    .addComponent(jLabel5)

    .addComponent(jLabel6)

    .addComponent(jLabel7))

    .addGap(71, 71, 71)

    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)

    .addComponent(jTextField5, javax.swing.GroupLayout.DEFAULT_SIZE, 141,

    Short.MAX_VALUE)

    .addComponent(jTextField4, javax.swing.GroupLayout.DEFAULT_SIZE, 141,

    Short.MAX_VALUE)

    .addComponent(jTextField3, javax.swing.GroupLayout.DEFAULT_SIZE, 141,Short.MAX_VALUE)

    .addComponent(jTextField2, javax.swing.GroupLayout.DEFAULT_SIZE, 141,

    Short.MAX_VALUE)

    .addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 141,

    Short.MAX_VALUE)

    .addComponent(jButton1, javax.swing.GroupLayout.Alignment.TRAILING)

    .addComponent(jTextField6)))

    .addGroup(layout.createSequentialGroup()

    .addGap(126, 126, 126)

    .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 140,

    javax.swing.GroupLayout.PREFERRED_SIZE)))

    .addContainerGap(60, Short.MAX_VALUE))

    );

    layout.setVerticalGroup(

    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

    .addGroup(layout.createSequentialGroup()

  • 8/2/2019 Eval Streaming

    47/49

    Page

    47

    .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 22,

    javax.swing.GroupLayout.PREFERRED_SIZE)

    .addGap(29, 29, 29)

    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

    .addComponent(jLabel2)

    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE,

    javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))

    .addGap(18, 18, 18)

    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

    .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE,

    javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)

    .addComponent(jLabel3))

    .addGap(18, 18, 18)

    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

    .addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)

    .addComponent(jLabel4))

    .addGap(18, 18, 18)

    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

    .addComponent(jTextField4, javax.swing.GroupLayout.PREFERRED_SIZE,

    javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)

    .addComponent(jLabel5))

    .addGap(18, 18, 18)

    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

  • 8/2/2019 Eval Streaming

    48/49

    Page

    48

    .addComponent(jTextField5, javax.swing.GroupLayout.PREFERRED_SIZE,

    javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)

    .addComponent(jLabel6))

    .addGap(18, 18, 18)

    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

    .addComponent(jTextField6, javax.swing.GroupLayout.PREFERRED_SIZE,

    javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)

    .addComponent(jLabel7, javax.swing.GroupLayout.PREFERRED_SIZE, 14,

    javax.swing.GroupLayout.PREFERRED_SIZE))

    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 26,

    Short.MAX_VALUE)

    .addComponent(jButton1)

    .addContainerGap())

    );

    pack();

    }//

    private void jTextField6ActionPerformed(java.awt.event.ActionEvent evt) {

    // TODO add your handling code here:

    }

    /**

    * @param args the command line arguments

    */

    public static void main(String args[]) {

  • 8/2/2019 Eval Streaming

    49/49

    java.awt.EventQueue.invokeLater(new Runnable() {

    public void run() {

    new signup().setVisible(true);

    }

    });

    }

    // Variables declaration - do not modify

    private javax.swing.JButton jButton1;

    private javax.swing.JLabel jLabel1;

    private javax.swing.JLabel jLabel2;

    private javax.swing.JLabel jLabel3;

    private javax.swing.JLabel jLabel4;

    private javax.swing.JLabel jLabel5;

    private javax.swing.JLabel jLabel6;

    private javax.swing.JLabel jLabel7;

    private javax.swing.JTextField jTextField1;

    private javax.swing.JTextField jTextField2;

    private javax.swing.JTextField jTextField3;

    private javax.swing.JTextField jTextField4;

    private javax.swing.JTextField jTextField5;

    private javax.swing.JTextField jTextField6;

    // End of variables declaration