Git Product home page Git Product logo

locomote-video-player's Introduction

Locomote Video Player Build Status Gitter

END-OF-LIFE NOTICE

As Adobe Flash is reaching its end-of-life Axis Communications is no longer maintaining this project.

For native HTML5/JavaScript video streaming of Axis cameras, see https://github.com/AxisCommunications/media-stream-library-js instead.

Getting started

Installing Locomote

Install Locomote using Bower with the following command:

bower install locomote

Install Locomote using npm with the following command:

npm install locomote-video-player

Running Locomote

To run Locomote in a web page, you need to host both the SWF (Player.swf in example below), and the JavaScript library (locomote.min.js in example below). Use a simple page like:

<html>
  <head>
    <title>Locomote</title>
    <style type="text/css">
      #player {
        width: 320px;
        height: 240px;
      }
    </style>
    <script src="locomote.min.js"></script>
    <script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
    <script type="text/javascript">

      $(document).ready(function() {
        /* Load SWF and instantiate Locomote */
        var locomote = new Locomote('player', 'Player.swf');

        /* Set up a listener for when the API is ready to be used */
        locomote.on('apiReady', function() {
          console.log('API is ready. `play` can now be called');

          /* Tell Locomote to play the specified media */
          locomote.play('rtsp://server.com/stream');
        });

        /* Start listening for streamStarted event */
        locomote.on('streamStarted', function() {
          console.log('stream has started');
        });

        /* If any error occurs, we should take action */
        locomote.on('error', function(err) {
          console.log(err);
        });
      });

    </script>
  </head>
  <body>
    <div id="player" class="player"></div>
  </body>
</html>

Socket Policy Server

Locomote uses sockets to connect to RTSP video streams which requires a socket policy server to be implemented. For RTMP and HTTP streams no socket policy server is required.

Flash Player 9 and above implements a strict access policy for Flash applications that make Socket or XMLSocket connections to a remote host. It now requires the presence of a socket policy file on the server.

When the Flash Player tries to make a connection, it checks in two places for the socket policy:

  • Port 843. If you are the administrator of a server, you can set up an application to listen on this port and return a server-wide socket policy.
  • The destination port. If you're running your own xml server, you can configure it to send the socket policy file.

The Flash player always tries port 843 first; if there's no response after 3 seconds, then it tries the destination port.

When the Flash player makes a connection, it sends the following XML string to the server:

<policy-file-request/>

Your server then must send the following XML in reply:

<cross-domain-policy>
     <allow-access-from domain="*" to-ports="*" />
</cross-domain-policy>

* is the wildcard and means "all ports/domains". If you want to restrict access to a particular port, enter the port number, or a list or range of numbers.

For more info about socket policy files and how to set up a server please read the following articles:

Setting up a socket policy file server

Policy file changes in Flash Player 9 and Flash Player 10

API Specification

Construction / Destruction

Locomote(element, url)

Locomote player constructor. Will load the Locomote SWF and embed the Locomote player in a DOM element.

First argument is either an ID to an element in the DOM as a string or a reference to a DOM element. This is where Locomote will embed the player.

The second argument is the URL to the player SWF.

The player will load asynchronously. When the player is loaded an apiReady event is sent. Before the apiReady event, no API methods can be used except on and off.

destroy()

Will remove the tag from the element is was embedded to and remove all references to it held by the javascript library. This can be called as any other action. E.g.

var locomote = new Locomote('player', 'Player.swf');
locomote.destroy();

Actions

play(url:String, [options:Object])

Starts playing video from url. Protocol is determined by url. Example: rtsp://server:port/stream.

Supported protocols:

  • rtsp - RTSP over TCP
  • rtsph - RTSP over HTTP
  • rtsphs - RTSP over HTTPS
  • rtsphap - RTSP over HTTPS via Axis Proxy
  • rtmp - RTMP
  • rtmpt - RTMP over HTTP
  • rtmps - RTMP over SSL
  • http - Progressive download via HTTP
  • https - Progressive download via HTTP over SSL
  • httpm - MJPEG over HTTP (via multipart/x-mixed-replace)

options is an optional object with the following attributes:

  • offset - The offset to start the stream at. This is only supported by the rtsp[h|hs|hap] protocol and requires the RTSP server to respect the range header in the play request.
  • httpUrl - The URL to use in HTTP requests if it differs from the RTSP URL. This is only supported by the rtsp[h|hs] (Note: not supported by rtsphap) protocol

stop()

Stops video stream.

seek(offset)

Seeks to the position specified by offset (calculated from the start of stream).

If the currently player stream is RTMP, it may not work with seeking if the stream is live. Even if the material played is recorded it may not work depending on RTMP server implementation. In the RTMP case, this is really just delegated to the implementation in the NetStream class.

This does not work for RTSP at all (yet).

pause()

Pauses video stream.

resume()

Resumes video from paused state.

playFrames(timestamp)

Appends all received frames up to and including the given timestamp to the play buffer. Only applicable if player is configured with frameByFrame.

streamStatus()

Returns a status object with the following data (if an entry is unknown, that value will be null):

  • fps - frames per second.
  • resolution (object) - the stream size { width, height }.
  • playbackSpeed - current playback speed. 1.0 is normal stream speed.
  • current time - ms from start of stream.
  • protocol - which high-level transport protocol is in use.
  • state - current playback state (playing, paused, stopped).
  • streamURL - the source of the current media.
  • duration - the duration of the currently playing media, or -1 if not available

playerStatus()

Returns a status object with the following data:

  • buffer - The length of the buffer in seconds.
  • microphoneVolume - the volume of the microphone when capturing audio
  • speakerVolume - the volume of the speakers (i.e. the stream volume).
  • microphoneMuted (bool) - if the microphone is muted.
  • speakerMuted (bool) - if the speakers are muted.
  • fullScreen (bool) - if the player is currently in fullscreen mode.
  • version - the Locomote version number.

speakerVolume(vol)

Sets speaker volume from 0-100. The default value is 50.

muteSpeaker()

Mutes the speaker volume. Remembers the current volume and resets to it if the speakers are unmuted.

unmuteSpeaker()

Resets the volume to previous unmuted value.

microphoneVolume(vol)

Sets microphone volume from 0-100. The default value is 50.

muteMicrophone()

Mutes the microphone. Remembers the current volume and resets to it if the microphone is unmuted.

unmuteMicrophone()

Resets the volume to previous unmuted value.

startAudioTransmit(url, type)

Starts transmitting microphone input to the camera speaker. The optional type parameter can be used for future implementations of other protocols, currently only the Axis audio transmit api is supported. For Axis cameras the url parameter should be in the format - http://server:port/axis-cgi/audio/transmit.cgi.

If the user must grant permission to use the microphone an audioTransmitRequestPermission event will be dispatched and startAudioTransmit must be called again once permission has been granted.

stopAudioTransmit()

Stops transmitting microphone input to the camera speaker.

config(config)

Sets configuration values of the player. config is a JavaScript object that can have the following optional values:

  • buffer - The number of seconds that should be buffered. The default value is 3.
  • connectionTimeout - The number of seconds before a broken connection times out and is closed. The default value is 10.
  • keepAlive - The number of seconds between keep alive requests (only RTSP at the moment). The default value is 0 (disabled).
  • scaleUp - Specifies if the video can be scaled up or not. The default value is false.
  • allowFullscreen - Specifices if fullscreen mode is allowed or not. The default value is true.
  • debugLogger - Specifices if debug messages should be shown in the Flash console or not. The default value is false.
  • frameByFrame - Specifices if media should be played immediately or wait for calls to playFrames. Not supported by the rtmp protocol. The default value is false. The http and https protocol implements this by creating virtual frames, a timestamp given in the frameReady event may not correspond to a real video frame, and the player may play up to 50 ms more than the last playFrames call specified. The rtsp[h|hs|hap] protocol dispatches the frameReady event for each assembled FLV tag, if audio and video is received out of order this will cause frameReady events to be dispatched out of order.

on(eventName:String, callback:Function)

Starts listening for events with eventName. Calls callback when event triggers.

off(eventName:String, callback:Function)

Stops listening for events with eventName.

Events

apiReady

Dispatched when the player is fully initialized. This is always the first event to be sent. Before the apiReady event no API methods can be called except on and off.

streamStarted

Dispatched when video streams starts.

streamPaused(result)

Dispatched when video stream is paused. result is an object with a single property reason that can have the following values:

  • user - stream was paused by user.
  • buffering - stream has stopped for buffering.

streamStopped

Dispatched when stream stops.

frameReady(timestamp)

Dispatched when a new frame, or pseudo-frame, is available to be appended to the play buffer. The timestamp of the frame is given by the argument. Append it using the playFrames method. This event will only be dispatched if the player is configured with the frameByFrame option. Otherwise, all frames will be appended to the play buffer immediately when received and this event will not be dispatched.

error(error)

Dispatched when video stream fails. error can be either protocol error (rtsp etc) or Locomote internal error. error is a generic object.

Locomote reports the following types of errors:

  • RTSP - The default error codes that are sent from the RTSP stream. Error codes: 100 - 551.
  • Flash Player - Errors that are reported by Flash Socket, NetStream and NetConnection classes. Error codes: 700 - 799.
  • Locomote - Errors generated by the Locomote player. Error codes: 800 - 899.

For detailed information about the errors, please see the ErrorManager class.

audioTransmitStarted

Dispatched when audio transmission starts.

audioTransmitStopped

Dispatched when audio transmission stops.

audioTransmitRequestPermission

Dispatched when flash is prompting the user to grant or deny access to the microphone. When this event is dispatched the setup is aborted and startAudioTransmit must be called again after the event audioTransmitAllowed has been dispatched.

audioTransmitAllowed

Dispatched when user has granted permission to use the microphone. A new call to startAudioTransmit must be made to initiate audio transmission.

audioTransmitDenied

Dispatched when user has denied permission to use the microphone. If this event is fired, any future calls to startAudioTransmit will generate an error (816).

fullscreenEntered

Dispatched when the player enters fullscreen mode.

fullscreenExited

Dispatched when the player exits fullscreen mode.

log

Dispatched when a log message is sent from the player.

Building Locomote

Building with npm

To compile the project, nodejs and npm is required. Since npm is bundled with nodejs, you only need to download and install nodejs.

To build Locomote, simply run npm install followed by gulp in the root directory. This will download Adobe Flex SDK, and other required modules and build the SWF file and the JavaScript library to dist/.

Building with Flash Builder

It's also possible to build Locomote with Flash Builder. Follow the steps below to set up a Flash Builder project.

  • Clone the Locomote repository from Github.
  • Build the project with npm as described above. This will build as3corelib and the VERSION file which are both required dependencies.
  • Create a new ActionScript project from Flash Builder and save it in the root folder of the cloned repository.
  • Inside Flash Builder, right click the Player.as file that is now in the default package and select "Set as Default Application".
  • Remove the .as file with the same name you used for the project that was automatically created in default package.
  • Add as3corelib to the project by selecting "Properties" in the "Project menu" and then "ActionScript Build Path". Click "Add SWC..." and add as3corelib which is located here: /ext/as3corelib/bin/as3corelib.swc. Make sure that the library is merged into the code. Please note that the as3corelib.swc file will only be available after you have built the project with npm.
  • You may need to change the path to the default HTML file in "Run/Debug Settings". Edit the Player launch configuration and make sure that the correct url to the HTML file is selected.
  • The project can now be built by Flash Builder. Please note that you also need to modify the default HTML template provided with the Flash Builder project to load the swf and Javascript file properly. An example of a minimal HTML file is provided below.

The Flash Builder project files and build folders will be ignored by git automatically so you shouldn't have to add anything to the repository after setting up the project.

License

This project is licensed under the BSD 3-Clause License. See LICENSE file.

locomote-video-player's People

Contributors

defragmentator avatar drowzy avatar gaetancollaud avatar gitter-badger avatar h-no avatar insonifi avatar kreopt avatar noseglid avatar rhammar avatar tor-oscar avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

locomote-video-player's Issues

Buffering time for low fps streams.

Hi. I succesfully using your plugin for flash to see RTSP streams. It's great!
But have some questions:
Is it possible to reduce buffering time for player? Better I will explain my tests:

  • I changed fps in camera settings from 1 fps to 30 fps.
  • when I set 1 fps player takes about 15 seconds before video will be shown.
  • when I set 30 fps player takes about 3 seconds before video will be shown.

From my side it looks like player needs buffer some number of frames to show stream.

There is live stream at this moment:
rtsp://admin:[email protected]:5555/ipcam_h264.sdp

I changed fps to 5 frames per second. From my side there is delay before video will be shown about 15 seconds.
Are you able to reproduce this 15 seconds delay on your side?
I choose such config:

public static var config:Object = {
'buffer': 0.1,
'connectionTimeout': 10,
'scaleUp': true,
'allowFullscreen': false,
'debugLogger': true
};

What do you think is it possible to show stream without buffer, I mean to get read of 15 deconds delay from realtime?

multiple channels in Firefox/IE

I'm trying implement multiple channels support. But I faced performance issue under Firefox and IE. When I use Firefox/IE to play 4 channels at the same time, browser become very unsmooth. But everything works perfectly in Chrome. Still figuring out how to solve the issue.

I've tried the following situations:

  1. 4 swf loaded in web, each swf with 1 client
  2. 4 clients in 1 swf
  3. 4 clients using stageVideo (Hardware acceleration)
  4. Worker (AS3 concurrency)

Any ideas what possible factor causes this?

Add duration to `streamStatus` (if known)

It would be nice if the duration of the current stream (assuming it's finite - and it is known) would be part of the streamStatus API. This would help to take actions when streams have reached a certain cuepoint - or just visual confirmation.

Crashes if there are no mic installed on system.

Flash player crashes when no mic is available.

"Cannot access a property or method of a null object reference"
at com.axis.audioclient::AxisTransmit/set microphoneVolume() - AxisTransmit.as:215
at com.axis.audioclient::AxisTransmit() - AxisTransmit.as:42

Dropping connection to RTSP server never sends streamError

If the TCP connection is stopped (without any FIN - e.g. by pulling ethernet cable), Locomote will dispatch the streamStopped, reason: buffering event, but then nothing else. It should dispatch some streamError, e.g. 804 to indicate that the stream actually is broken.

Problems with some RTSP stream (Axis cameras)

During testing I've seen that requesting Live RTSP stream from some Axis network cameras fails.

To be more specific it only seems to be a problem if the camera is running the latest 5.50 firmware.
Axis M1054, firmware 5.50.x doesn't work
Axis M5014, firmware 5.50.x doesn't work
Same cameras but with firmware 5.40.x works as intended.
My guess is that there's some difference in the RTSP server included, but I haven't found any details yet.

Issue with RTMP single url

Hi guys,

thanks a lot for your nice player.

We have some issues with RTMP single url parsing.

In facts, Wowza (and other rtmp servers) includes a path in the url, and your player use only the last component of url as stream name, instead of complete path

some documentation here : http://www.wowza.com/forums/content.php?55-How-to-format-Adobe-Flash-RTMP-URLs

Do you think it's possible to improve your url parsing for this usage? or maybe implement a feature to set url + streamname (as flowplayer flash rtmp plugin) ?

Regards

David For Morphean

security sandbox issue

Since the http and the rtsp server are not within one machine, now I encountered the sandbox issue,
in browser flash cannot play rtsp video,
any solutions????

README: `off` documentation incorrect

off(eventName:String, callback:Function)
Stops listening for events with eventName. Calls callback when event triggers.

Surely the last sentance shouldn't be there.

gulp build failed!

this is the build result:
[root@ip- locomote-video-player]# gulp &
[1] 6714
[root@ip- locomote-video-player]# [09:32:50] Using gulpfile /home/russ/projects/locomote-video-player/gulpfile.js
[09:32:50] Starting 'submodule'...
[09:32:50] exec: git submodule init && git submodule update
[09:32:50] Starting 'minify'...
[09:32:50] Finished 'minify' after 154 ms
[09:32:50] Finished 'submodule' after 182 ms
[09:32:50] Starting 'build-as3corelib'...
[09:32:50] exec: ant -f ext/as3corelib/build/build.xml
[09:32:50] Error: JAVA_HOME is not defined correctly.
We cannot execute java

[09:32:50] 'build-as3corelib' errored after 9.85 ms
[09:32:50] Error: Command failed:
at ChildProcess.exithandler (child_process.js:637:15)
at ChildProcess.EventEmitter.emit (events.js:98:17)
at maybeClose (child_process.js:735:16)
at Socket. (child_process.js:948:11)
at Socket.EventEmitter.emit (events.js:95:17)
at Pipe.close (net.js:466:12)

[1]+ Exit 1 gulp

and this is my env:
PATH=/usr/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/java/jdk1.7.0_71/bin:/usr/java/jdk1.7.0_71/jre/bin:/usr/java/jdk1.7.0_71/bin:/home/russ/bin
MAIL=/var/spool/mail/russ
PWD=/home/russ/projects/locomote-video-player
JAVA_HOME=/usr/java/jdk1.7.0_71
LANG=en_US.UTF-8
HISTCONTROL=ignoredups
HOME=/root
SHLVL=2
LOGNAME=russ
SSH_CONNECTION=58.240.47.246 40013 172.31.10.17 1122
CLASSPATH=/usr/java/jdk1.7.0_71/jre/lib/ext:.:/usr/java/jdk1.7.0_71/jre/lib/rt.jar:/usr/java/jdk1.7.0_71/lib/dt.jar:/usr/java/jdk1.7.0_71/lib/tools.jar

the jdk is all right , I've tested it.
can anybody please help find the reason?

Probem with Vivotek cameras

Some Vivotek cameras sends parameters in different order first interleaved then unicast.
Like this:
RTP/AVP/TCP;interleaved=0-1;unicast

In src/com/axis/rtspclient/RTSPClient.as order is hardcoded so it, doesn't work.
There is:
if (!/RTP/AVP/TCP;unicast;interleaved=/.test(parsed.headers["transport"])) {

I've changed it to:
if (!/RTP/AVP/TCP;interleaved=/.test(parsed.headers["transport"])) {
and now it works with Vivotek cameras, but it should be done more elegant.

Video resize issues

Hi,

I have an issue with the video resize again (I opened the issue #97 in October 2014). I not sure if this is linked or not, this is why a created a new issue.

As you can see on the screenshot below, the first player failed to resize itself. This appends when I change the stream url (when loading the next stream from a playlist).
videoresize1

This appends rarely and randomly. I didn't find a way to reproduce the issue every time.

This problem appears since version 0.5.0, so I think it may be linked to the commit 8e9dea5 or 8e8352a, but I don't know how...

When there is a gap in the the playlist (even a very small one), I stop and destroy the player and create it again when there will be a stream again. I do this for performance improvement since we can have up to 16 players at the same time. This is why I think it's more likely to be linked to 8e9dea5 and this had nothing to do with the fullscreen.

Any idea on this one ? I will continue to investigate but I have no clue yet.

Cheers

Gaétan

Where to download the Player.swf?

I clone the repository and i do not have built in Player.swf. Can you make always the recent Playwer.swf compiled version available for testing. (in case compiler is not available it help)

After player modifications, Status seems fine, but no video image is playing

After modifications done (mostly in RTSPClient.as) in order to get the player to work with a DVR which has a different auth handshake from an AXIS camera, I managed to get the stream to play (send data), and all seems fine on the player's logging, however no video / image is showing in the player.

This is the log from console:

stream has started (index):68

playerStatus:

Object {microphoneMuted: false, speakerMuted: false, buffer: 10, speakerVolume: 50, version: "0.3.0"…}buffer: 10fullscreen: falsemicrophoneMuted: falsemicrophoneVolume: 50speakerMuted: falsespeakerVolume: 50version: "0.3.0"proto:

streamStatus

Object Object {video: true, playbackSpeed: 1, streamURL: "rtsp://admin:[email protected]:554/cam/realmonitor", protocol: "rtsp", audio: false…}audio: falsefps: 0playbackSpeed: 1protocol: "rtsp"resolution: Objectheight: 720width: 1280__proto__: Objectstate: "playing"streamURL: "rtsp://admin:[email protected]:554/cam/realmonitor"video: true__proto__: Object

no sound within browser

After published onto website,
if I play a flv media from http server, everything works as expected.
but if I play a rtsp media, there is just video, no audio,
is there anyone encountered the same issue?

Idea : Event x sec before end of stream

Hi,

For stream with metadata containing the end date. I would be great if we can have an event x (configurable, default 5) seconds before the end of stream. In case of a playlist we could load directly the next url or prepare something for the next stream.

In the case of AXIS AVHS, who split long record in chunks of 5 minutes, we could directly load the next chunk url.

What do you think ?

Gaétan

Error receiving stream with live 555 proxy to dericam

Hi,
I have attached the SDP (I hope) of the proxy - please could you take a look? Thanks for creating an amazing library. I have to use the proxy because of the adobe cross domain policy.

Opening connection to 192.168.168.67, port 8554...
...remote connection opened

Sending request: OPTIONS rtsp://192.168.168.67:8554/proxyStream RTSP/1.0
CSeq: 2
User-Agent: openRTSP (LIVE555 Streaming Media v2013.04.30)


Received 152 new bytes of response data.
Received a complete OPTIONS response:
RTSP/1.0 200 OK
CSeq: 2
Date: Fri, Jan 09 2015 11:34:29 GMT
Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, SET_PARAMETER


Sending request: DESCRIBE rtsp://192.168.168.67:8554/proxyStream RTSP/1.0
CSeq: 3
User-Agent: openRTSP (LIVE555 Streaming Media v2013.04.30)
Accept: application/sdp


Received 792 new bytes of response data.
Received a complete DESCRIBE response:
RTSP/1.0 200 OK
CSeq: 3
Date: Fri, Jan 09 2015 11:34:29 GMT
Content-Base: rtsp://192.168.168.67:8554/proxyStream/
Content-Type: application/sdp
Content-Length: 620

v=0
o=- 1420803234445830 1 IN IP4 192.168.168.67
s=LIVE555 Streaming Media v2013.04.30
i=LIVE555 Streaming Media v2013.04.30
t=0 0
a=tool:LIVE555 Streaming Media v2013.04.30
a=type:broadcast
a=control:*
a=range:npt=0-
a=x-qt-text-nam:LIVE555 Streaming Media v2013.04.30
a=x-qt-text-inf:LIVE555 Streaming Media v2013.04.30
m=video 0 RTP/AVP 96
c=IN IP4 0.0.0.0
b=AS:50
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=4D002A;sprop-parameter-sets=Z00AKpWoHgCJ+VA=,aO48gA==
a=control:track1
m=audio 0 RTP/AVP 97
c=IN IP4 0.0.0.0
b=AS:50
a=rtpmap:97 G726-16/8000
a=control:track2

Opened URL "rtsp://192.168.168.67:8554/proxyStream", returning a SDP description:
v=0
o=- 1420803234445830 1 IN IP4 192.168.168.67
s=LIVE555 Streaming Media v2013.04.30
i=LIVE555 Streaming Media v2013.04.30
t=0 0
a=tool:LIVE555 Streaming Media v2013.04.30
a=type:broadcast
a=control:*
a=range:npt=0-
a=x-qt-text-nam:LIVE555 Streaming Media v2013.04.30
a=x-qt-text-inf:LIVE555 Streaming Media v2013.04.30
m=video 0 RTP/AVP 96
c=IN IP4 0.0.0.0
b=AS:50
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=4D002A;sprop-parameter-sets=Z00AKpWoHgCJ+VA=,aO48gA==
a=control:track1
m=audio 0 RTP/AVP 97
c=IN IP4 0.0.0.0
b=AS:50
a=rtpmap:97 G726-16/8000
a=control:track2

Created receiver for "video/H264" subsession (client ports 40200-40201)
Created receiver for "audio/G726-16" subsession (client ports 38388-38389)
Sending request: SETUP rtsp://192.168.168.67:8554/proxyStream/track1 RTSP/1.0
CSeq: 4
User-Agent: openRTSP (LIVE555 Streaming Media v2013.04.30)
Transport: RTP/AVP;unicast;client_port=40200-40201


Received 207 new bytes of response data.
Received a complete SETUP response:
RTSP/1.0 200 OK
CSeq: 4
Date: Fri, Jan 09 2015 11:34:29 GMT
Transport: RTP/AVP;unicast;destination=192.168.168.67;source=192.168.168.67;client_port=40200-40201;server_port=6970-6971
Session: 9563DE33


Setup "video/H264" subsession (client ports 40200-40201)
Sending request: SETUP rtsp://192.168.168.67:8554/proxyStream/track2 RTSP/1.0
CSeq: 5
User-Agent: openRTSP (LIVE555 Streaming Media v2013.04.30)
Transport: RTP/AVP;unicast;client_port=38388-38389
Session: 9563DE33


Received 207 new bytes of response data.
Received a complete SETUP response:
RTSP/1.0 200 OK
CSeq: 5
Date: Fri, Jan 09 2015 11:34:29 GMT
Transport: RTP/AVP;unicast;destination=192.168.168.67;source=192.168.168.67;client_port=38388-38389;server_port=6972-6973
Session: 9563DE33


Setup "audio/G726-16" subsession (client ports 38388-38389)
Created output file: "video-H264-1"
Created output file: "audio-G726-16-2"
Sending request: PLAY rtsp://192.168.168.67:8554/proxyStream/ RTSP/1.0
CSeq: 6
User-Agent: openRTSP (LIVE555 Streaming Media v2013.04.30)
Session: 9563DE33
Range: npt=0.000-


Received 272 new bytes of response data.
Received a complete PLAY response:
RTSP/1.0 200 OK
CSeq: 6
Date: Fri, Jan 09 2015 11:34:29 GMT
Range: npt=0.000-
Session: 9563DE33
RTP-Info: url=rtsp://192.168.168.67:8554/proxyStream/track1;seq=38274;rtptime=1127386141,url=rtsp://192.168.168.67:8554/proxyStream/track2;seq=28067;rtptime=2254958021

Started playing session
Receiving streamed data (signal with "kill -HUP 15129" or "kill -USR1 15129" to terminate)...

No stream received after successful security check

Hello!

I receive the "API is ready. 'play' can now be called'. I can follow the security file question and response and I don't get any "Security errors" anymore (security is ok).
But I get no stream. The 'rtsp'-url from the ip-camera works perfect in VLC running on the same computer, but Locomote shows white page with no errors in debug mode (ctrl+shift+I). I have tried to put in 'mp4'-urls and they work fine. The code for the website is yours (the example), the only change is the rtsp-url.

Any ideas?

Google Chrome is my browser. The same occurs for IE 11 as well.

Thanks in advance.

Br
Alexander

RTMP single address parsing

Hi guys,

thanks a lot for your nice player.

We have some issues with RTMP single url parsing.

In facts, Wowza (and other rtmp servers) includes a path in the url, and your player use only the last component of url as stream name, instead of complete path

some documentation here 👍

About fullscreen mode

I was double clicked video screen, the browser window was changed to fullscreen but the video window was not.

slow in browser!

Hi,
I've just found a playing-slow issue, which might be very important.
The thing is, when I play a rtsp media with the flash debuger, everything is all right; but when I play the same media within a browser, for example, IE, firefox, chrome, etc., the video showing is not identically as realtime as playing in the debuger. Sometimes it showed a slow-fast-fast rhythm, while sometimes it could be freezing for half a second. And no error info showed at all.
Both the player client and rtsp server are running on Windows.
Is there anyone encountered the same problem?
I wish noseglid could spend some time taking care of this issue.
Thanks very much!

Pause() after Resume() doesn't work

I am playing with this plugin now, playing a flv file locally via http. It's not a real live stream.
The bug I encountered is this:

  1. Play()
  2. Pause()
  3. Resume()
  4. Pause() <-- gives error that says cannot pause if the stream is not playing.

It feels like a bug but is it one that would be moot for use on live stream video?
My purpose ultimately is to use this plugin for stream RSTP video. I'm simply testing with a local file for style and other dev purpose.

Video not resized after class change

Hi,

To manage multiple video streams we have an angularJS application. If we have one stream, it takes all the space, if we have two streams, we split the screen in 2 col, if we have three or four streams we split the screen in 2 row, 2 col, and so one. Everything is done by adding and removing CSS class (which define the layout).

We have the issue that the locomote does not resize the stream when our layout change. I took some screenshots. The first one shows two camera streams. Then we deselect the second one. The fist one should take all the space left (it worked with flowplayer).
1
2

The normal behavior would be this one. To have this, I went fullscreen and back to normal to force the video resize.
3

I don't know if you can detect when the flash element is resized. If not, is it possible to expose the videoResize method of the player, so I can call it manually.

Best regards

Gaétan Collaud

Receiving RTP packets, but no video

Hi and thanks for writing this player!

When playing H.264 video from our Live555-based RTSP server, I get the following output, but no video. This is in Chrome 42 and IE 11. By adding a log print on each pushData call in FLVMux.as I can see that the RTP packets are coming through and getting as far as the NetStream object, but still no joy in terms of actually seeing the video.

API is ready. play can now be called
testvideo.html:31 RTSP OUT:
testvideo.html:31 RTSP IN:
testvideo.html:31 RTSPClient: STATE_OPTIONS
testvideo.html:31 RTSP OUT:
testvideo.html:31 RTSP IN:
testvideo.html:31 RTSPClient: STATE_DESCRIBE
testvideo.html:31 v=0
o=- 1431121016212696 1 IN IP4 169.254.222.174
s=Session streamed by the camera
i=TrafficCam
t=0 0
a=tool:LIVE555 Streaming Media v2015.05.03
a=type:broadcast
a=control:*
a=source-filter: incl IN IP4 * 169.254.222.174
a=rtcp-unicast: reflection
a=range:npt=0-
a=x-qt-text-nam:Session streamed by the camera
a=x-qt-text-inf:TrafficCam
m=video 0 RTP/AVP 96
c=IN IP4 0.0.0.0
b=AS:20000
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=42C01E;sprop-parameter-sets=Z0LAHtkAoD2h,AQAAAwA=
a=control:track1

testvideo.html:31 Ignored unknown SDP directive: i=TrafficCam
testvideo.html:31 Ignored unknown SDP directive: c=IN IP4 0.0.0.0
testvideo.html:31 Ignored unknown SDP directive: b=AS:20000
testvideo.html:31 SDP contained 1 track(s). Calling SETUP for each.
testvideo.html:31 RTSPClient: STATE_SETUP
testvideo.html:31 undefined
testvideo.html:31 Setting up track: rtsp://127.0.0.1:5640//track1
testvideo.html:31 RTSP OUT:
testvideo.html:31 RTSP IN:
testvideo.html:31 RTSPClient: STATE_SETUP
testvideo.html:31 RTP/AVP/TCP;unicast;destination=127.0.0.1;source=127.0.0.1;interleaved=0-1
testvideo.html:31 RTSP OUT:
testvideo.html:31 RTSP IN:
testvideo.html:31 RTSPClient: STATE_PLAY
testvideo.html:31 sprop-parameter-sets = Z0LAHtkAoD2h,AQAAAwA=
testvideo.html:31 FLVMux: sps profile =66
testvideo.html:31 FLVMUX: sps constraints =192
testvideo.html:31 FLVMux: sps level =30
testvideo.html:31 FLVMux: stream params =
testvideo.html:31 .
testvideo.html:31 Netstream Metadata:
testvideo.html:31 scaling video, scale:0.50 (aspect ratio: 1.33)
testvideo.html:31 Done resizing
testvideo.html:31 NetStream status:
testvideo.html:21 stream has started

Playing RTMP stream calls metadata twice

When playing an RTMP video stream the video is scaled twice because onMetaData is called twice (with same parameters). Only once should be enough

onMetaData (index):27
scaling video, scale:0.50 (aspect ratio: 1.33) (index):27
onMetaData (index):27
scaling video, scale:0.50 (aspect ratio: 1.33)

Request : split play(url) in load(url) and play()

Hi,

I wondered if it was possible to split the play(url) method into two separate actions : load(url) and play(). In addition it would be great if we had a bufferReady event.

We can keep the play(url) function to be retro-compatible if you want. Or rename it to loadAndPlay(url)

Use case
We have a page with multiple players. Each player plays a different stream. We want the time to be synced between all players. With this two methods, we can fill all the buffers and the hit play at the same time on all players. This way we can ensure that all players are synced (at least on the closest keyframe).

Technical aspect
I'm not sure if all stream can be loaded then played. I think it's possible for HTTP and RTMP but for RTSP... I'm not a stream protocol expert.

What do you think ?

Unable to determine control URL - Code 824

Hello,

I have the following error when I use the player.

{message: "RTSPClient: Unable to determine control URL.", code: 824}

Here is the log from the player:

API is ready. play can now be called
RTSPClient: STATE_OPTIONS
RTSPClient: STATE_DESCRIBE
Ignored unknown SDP directive: i=N/A
Ignored unknown SDP directive: c=IN IP4 192.168.1.21
SDP contained 2 track(s). Calling SETUP for each.
RTSPClient: STATE_SETUP
Can't determine track URL from block.control:trackID=0, session.control:undefined, and > content-base:192.168.1.57:8086/
Object {message: "RTSPClient: Unable to determine control URL.", code: 824}

Here is my RTSP server logs:

Request: OPTIONS

requestString: OPTIONS * RTSP/1.0
request header: CSeq: 2
request header: User-Agent: Locomote 0.5.0

Response: OPTIONS

RTSP/1.0 200 OK
Server: MajorKernelPanic RTSP Server
Cseq: 2
Content-Length: 0
Public: DESCRIBE,SETUP,TEARDOWN,PLAY,PAUSE

Request: DESCRIBE

requestString: DESCRIBE rtsp://192.168.1.57 RTSP/1.0
request header: CSeq: 3
request header: User-Agent: Locomote 0.5.0
request header: Accept: application/sdp

Response: DESCRIBE

RTSP/1.0 200 OK
Server: MajorKernelPanic RTSP Server
Cseq: 3
Content-Length: 465
Content-Base: 192.168.1.57:8086/
Content-Type: application/sdp
v=0
o=- 0 0 IN IP4 192.168.1.57
s=Unnamed
i=N/A
c=IN IP4 192.168.1.21
t=0 0
a=recvonly
m=audio 5004 RTP/AVP 96
a=rtpmap:96 mpeg4-generic/8000
a=fmtp:96 streamtype=5; profile-level-id=15; mode=AAC-hbr; config=1588; SizeLength=13; IndexLength=3; IndexDeltaLength=3;
a=control:trackID=0
m=video 5006 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=420014;sprop-parameter-sets=J0IAFKaBQfE=,KM48gA==;
a=control:trackID=1

I think there is an issue in the locomote SDP parser or in my RTSP server response.
I can connect to my RTSP server using VLC but not using locomote player.

Error building Locomote with npm install

Tried to run npm install after cloning and got the below errors.
(Windows 8)

[email protected] postinstall D:\dropbox\src\locomote-video-player-master
gulp --color

[18:18:17] Using gulpfile D:\dropbox\src\locomote-video-player-master\gulpfile.js
[18:18:17] Starting 'submodule'...
[18:18:17] exec: git submodule init && git submodule update
[18:18:17] Starting 'minify'...
[18:18:17] Finished 'minify' after 134 ms
[18:18:17] 'submodule' errored after 257 ms
[18:18:17] Error: Command failed: fatal: Not a git repository (or any of the parent directories): .git

at ChildProcess.exithandler (child_process.js:648:15)
at ChildProcess.emit (events.js:98:17)
at maybeClose (child_process.js:756:16)
at Socket.<anonymous> (child_process.js:969:11)
at Socket.emit (events.js:95:17)
at Pipe.close (net.js:465:12)

npm ERR! [email protected] postinstall: gulp --color
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] postinstall script.
npm ERR! This is most likely a problem with the locomote-video-player package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! gulp --color
npm ERR! You can get their info via:
npm ERR! npm owner ls locomote-video-player
npm ERR! There is likely additional logging output above.
npm ERR! System Windows_NT 6.2.9200
npm ERR! command "C:\Program Files\nodejs\node.exe" "C:\Program Files\nodejs\node_modules\npm\bin\npm-cli.js"
"install"
npm ERR! cwd D:\dropbox\src\locomote-video-player-master
npm ERR! node -v v0.10.30
npm ERR! npm -v 1.4.21
npm ERR! code ELIFECYCLE
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! D:\dropbox\src\locomote-video-player-master\npm-debug.log
npm ERR! not ok code 0

SDP prase error

the flash can access the RTSP server
but parse error

TypeError: Error #1009: Cannot access a property or method of a null object reference.
at com.axis.rtspclient::SDP/parseAttribute()[/home/zack/work/cloud/locomote-video-player/src/com/axis/rtspclient/SDP.as:218]
at com.axis.rtspclient::SDP/parse()[/home/zack/work/cloud/locomote-video-player/src/com/axis/rtspclient/SDP.as:78]
at com.axis.rtspclient::RTSPClient/onRTSPCommand()[/home/zack/work/cloud/locomote-video-player/src/com/axis/rtspclient/RTSPClient.as:246]
at com.axis.rtspclient::RTSPClient/onData()[/home/zack/work/cloud/locomote-video-player/src/com/axis/rtspclient/RTSPClient.as:160]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at Function/()[/home/zack/work/cloud/locomote-video-player/src/com/axis/rtspclient/RTSPoverTCPHandle.as:25]

And the RTSP packet is

OPTIONS * RTSP/1.0

CSeq: 2

User-Agent: Slush f9f21f9

RTSP/1.0 200 OK

Server: VideoServer/1.0.0 (Build/1.0; Platform/Linux; Network Video Server)

Cseq: 2

Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, OPTIONS, GET_PARAMETER, SET_PARAMETER, RECORD, QUERY

DESCRIBE rtsp://159.99.251.180/stream2 RTSP/1.0

CSeq: 3

User-Agent: Slush f9f21f9

Accept: application/sdp

RTSP/1.0 200 OK

Server: VideoServer/1.0.0 (Build/1.0; Platform/Linux; Network Video Server)

Cseq: 3

Cache-Control: must-revalidate

Require: onvif-replay

Content-length: 325

Date: Thu, 24 Jul 2014 04:39:59 GMT

Expires: Thu, 24 Jul 2014 04:39:59 GMT

Content-Type: application/sdp

x-Accept-Retransmit: our-retransmit

x-Accept-Dynamic-Rate: 1

Content-Base: rtsp://159.99.251.180/stream2/

v=0

o=admin 1406176799 1406176799 IN IP4 159.99.251.180

s=RTSP Session

t=0 0

m=video 0 RTP/AVP 96

a=rtpmap:96 H264/90000

a=fmtp:96 packetization-mode=1;profile-level-id=42001F;sprop-parameter-sets=Z0IAH5WoFAFuQA==,aM48gA==

a=control:trackID=0

m=audio 0 RTP/AVP 0

a=rtpmap:0 PCMU/8000

a=fmtp:0

a=control:trackID=1

mouse events

Hello,

I could be nice if when we (single) click on the player we have an event with the coordinate of the mouse. The coordinate should be in percent rather than pixel (or if we have both it's ok).

We want to implement a PTZ feature by clicking on the screen and we need this kind of information.

The best would be to have the onPress, onRelease and onMouve, so we can draw a rectangle rather than just clicking where we want to zoom. :D

I know this is a really specific feature, but maybe other people will need it too

Regards

Gaetan

Could not play rtsp, but vlc player could play the same url

  • Build:
~/PhpstormProjects/ad/locomote-video-player $ npm install

> [email protected] postinstall ~/PhpstormProjects/ad/locomote-video-player
> gulp --color

[21:50:47] Using gulpfile ~/PhpstormProjects/ad/locomote-video-player/gulpfile.js
[21:50:47] Starting 'submodule'...
[21:50:47] exec: git submodule init && git submodule update
[21:50:47] Starting 'version'...
[21:50:47] exec: git describe --always > VERSION
[21:50:47] Finished 'version' after 11 ms
[21:50:48] Finished 'submodule' after 140 ms
[21:50:48] Starting 'build-as3corelib'...
[21:50:48] Finished 'build-as3corelib' after 40 μs
[21:50:48] Starting 'build-locomote'...
[21:50:48] exec: ./node_modules/.bin/mxmlc  -use-network=true -static-link-runtime-shared-libraries=true -use-resource-bundle-metadata=true -accessible=false -allow-source-path-overlap=false -target-player=11.1 -locale=en_US -output=build/Player.swf -debug=true -benchmark=false -verbose-stacktraces=false -strict=true -warnings=true -show-unused-type-selector-warnings=true -show-actionscript-warnings=true -show-binding-warnings=true -show-invalid-css-property-warnings=true -incremental=false -es=false -include-libraries=ext/as3corelib/bin/as3corelib.swc src/Player.as
[21:50:51] Finished 'build-locomote' after 3.3 s
[21:50:51] Starting 'default'...
[21:50:51] Finished 'default' after 5.64 μ
  • example.html, placed in root directory of locomote-video-player project
<html>
<head>
    <title>Locomote</title>
    <style type="text/css">
        #player {
            width: 320px;
            height: 240px;
        }
    </style>
    <script src="/jslib/locomote.js"></script>
    <script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
    <script type="text/javascript">

        var locomote;
        $(document).ready(function () {
            /* Instansiate Locomote. First argument is the id of the DOM
             element where Locomote should embed the player. The second
             argument is the URL to the player SWF */
            locomote = new Locomote('player', '/build/Player.swf');

            /* Start listening for streamStarted event */
            locomote.on('streamStarted', function () {
                console.log('stream has started');
            });

            /* Set up a listener for when the API is ready to be used */
            locomote.on('apiReady', function () {
                console.log('API is ready. `play` can now be called');

                /* Tell Locomote to play the specified media */

                 // VLC Player can player this url, but locomote can not 
                locomote.play('rtsp://211.139.194.251:554/live/2/13E6330A31193128/5iLd2iNl5nQ2s8r8.sdp');
            });
        });

    </script>
</head>
<body>
<div id="player" class="player" style="width: 500px;height: 300px;"></div>
</body>
</html>
  • start a web server in root directory of locomote-video-player
python -m SimpleHTTPServer 9898
  • access it with url: http://localhost:9898/example.html
  • I have not see the output of console.log('stream has started'); in my console of chrome browser, and i guess the streamStarted event has not be triggered.

Error building Locomote with npm install

Hello, before using bower to install locomote, I think it's necessary to build locomote at first so I try to run npm install in my root directory. It seems that I face to a similar problem with nadavl when run npm install.

(Windows 7)

[10:34:41] Using gulpfile \Documents\GitHub\locomote-video-player\gulpfile.js
[10:34:41] Starting 'submodule'...
[10:34:41] exec: git submodule init && git submodule update
[10:34:41] Starting 'minify'...
[10:34:41] Finished 'minify' after 148 ms
[10:34:45] Finished 'submodule' after 3.36 s
[10:34:45] Starting 'build-as3corelib'...
[10:34:45] exec: ant -f ext/as3corelib/build/build.xml
[10:34:45] 'ant' ���O�����Υ
���R�O�B�i���檺�{���Χ妸�ɡC

[10:34:45] 'build-as3corelib' errored after 43 ms
[10:34:45] Error: Command failed: 'ant' ���O�����Υ~���R�O�B�i���檺�{���Χ妸�ɡC

at ChildProcess.exithandler (child_process.js:648:15)
at ChildProcess.emit (events.js:98:17)
at maybeClose (child_process.js:756:16)
at Process.ChildProcess._handle.onexit (child_process.js:823:5)

npm ERR! [email protected] postinstall: gulp --color
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] postinstall script.
npm ERR! This is most likely a problem with the locomote-video-player package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! gulp --color
npm ERR! You can get their info via:
npm ERR! npm owner ls locomote-video-player
npm ERR! There is likely additional logging output above.
npm ERR! System Windows_NT 6.1.7601
npm ERR! command "C:\Program Files\nodejs\node.exe" "C:\Program Files\nod
ejs\node_modules\npm\bin\npm-cli.js" "install"
npm ERR! cwd C:\Users\max_huang\Documents\GitHub\locomote-video-player
npm ERR! node -v v0.10.33
npm ERR! npm -v 1.4.28
npm ERR! code ELIFECYCLE
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! C:\Users\max_huang\Documents\GitHub\locomote-video-player\npm-debug
.log
npm ERR! not ok code 0

and I'm sure that there is a .git folder in the folder where I run npm install.

Thanks for help!!!

error 731

hi, everyone.
I tried to use the locomote video player.
When streaming on rtsp protocol, i get this error (error 731) in browser console.
please help me.

unable to build under flash builder 4.7

I am able to build the project under nodejs and flashdevelop. (both work fine, and the output swf file works fine as well)
However, follow the instructions, after creating action script project, flash builder 4.7 does not build at all.
Please help me to build it under flash builder 4.7.

Sincerely

AudioTransmit: stop destroy mic and gives NPError on next stop

AxisTransmit.as:108 sets the member variable of AxisTransmit to null. This is used on the next stop which will cause a null reference error:

Locomote('player').stopAudioTransmit();
  Uncaught TypeError: Error #1009 VM7305:1
  (anonymous function) VM7305:1
  Locomote.stopAudioTransmit locomote.js:183
  (anonymous function) VM7304:2
  InjectedScript._evaluateOn VM7298:704
  InjectedScript._evaluateAndWrap VM7298:643
  InjectedScript.evaluate VM7298:557
Error: Error calling method on NPObject.
  message: "Error calling method on NPObject."
  stack: (...)
  get stack: function () { [native code] }
  set stack: function () { [native code] }
  __proto__: d

start seems to fetch the microphone each time, which is works to start AxisTransmit again after the member variable have been set to null. Either stop should fetch the microphone again, or start should use the instance variable (and the null-setting should be removed).

Hardware accelerated video not supported

Locomote currently doesn't support hardware accelerated video. In order to support this, the StageVideo class has to be used when playing accelerated video instead of the Video class which is currently used.

For accelerated video, the wmode property of the embed tag should be set to direct instead of transparent. Accelerated video does not support HTML objects to be placed on top of the video.

The Player sends the video object to various other classes and since there's no common interface between the StageVideo and Video classes some functionality needs to be rewritten in order to support the StageVideo class and hardware acceleration. It's also necessary to implement switching between StageVideo and Video depending on if hardware acceleration is available on the device or not.

RTSPoverTCPHandle stops receiving data after 30 seconds

Hello,

I'm evaluating this video player to connect to an RTSP stream.

The player starts playing as expected but, after 30 seconds of receiving data, it just stops receiving new one, then:

  1. The buffer plays after it becomes Empty (which is fine)
  2. The player is stopped after a time-out without receiving any data (which is fine)

Traces on onData(event:ProgressEvent) shows this behaviour but I'm not really sure if there is something wrong/missing with this class or there is a some kind of "proxy-in-the-middle" closing (well, not really closing the connection at all but pausing it) the socket connection.

I have also tried to set up a "keep-alive" to write channel.write somthing with no luck. The message is send but the socket pauses receiving data after those 30 seconds.

No error events are received but just that PAUSE on receiving data that silently "closes" the player for reason 2).

Thank you.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.