{"action":"created","comment":{"url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/pulls/comments/38541494","id":38541494,"diff_hunk":"@@ -100,64 +98,156 @@\n \n       // append muxed segments to their respective native buffers as\n       // soon as they are available\n-      this.transmuxer_ = new muxjs.mp2t.Transmuxer();\n-      this.transmuxer_.on('data', function(event) {\n-        var buffer;\n-        if (event.type === 'video') {\n-          buffer = this.videoBuffer_;\n-          this.videoUpdating_ = false;\n-        } else {\n-          buffer = this.audioBuffer_;\n-          this.audioUpdating_ = false;\n-        }\n-        if (this.timestampOffset !== undefined) {\n-          buffer.timestampOffset = this.timestampOffset;\n+      this.transmuxer_ = new Worker(videojs.MediaSource.webWorkerURI || '/src/transmuxer_worker.js');\n+\n+      this.transmuxer_.onmessage = function (event) {\n+        if (event.data.action === 'data') {\n+          var\n+            buffer,\n+            segment = event.data;\n+          // Cast to type\n+          segment.data = new Uint8Array(segment.data);\n+\n+          // If any sourceBuffers have not been created, do so now\n+          if (segment.type === 'video') {\n+            if (!self.videoBuffer_) {\n+              // 4d400d\n+              // 42c01e\n+              self.videoBuffer_ = mediaSource.addSourceBuffer_('video/mp4;codecs=avc1.4d400d');\n+              // aggregate buffer events\n+              self.videoBuffer_.addEventListener('updatestart',\n+                                                 aggregateUpdateHandler(self, 'audioBuffer_', 'updatestart'));\n+              self.videoBuffer_.addEventListener('update',\n+                                                 aggregateUpdateHandler(self, 'audioBuffer_', 'update'));\n+              self.videoBuffer_.addEventListener('updateend',\n+                                                 aggregateUpdateHandler(self, 'audioBuffer_', 'updateend'));\n+            }\n+          } else {\n+            if (!self.audioBuffer_) {\n+              self.audioBuffer_ = mediaSource.addSourceBuffer_('audio/mp4;codecs=mp4a.40.2');\n+              // aggregate buffer events\n+              self.audioBuffer_.addEventListener('updatestart',\n+                                                 aggregateUpdateHandler(self, 'videoBuffer_', 'updatestart'));\n+              self.audioBuffer_.addEventListener('update',\n+                                                 aggregateUpdateHandler(self, 'videoBuffer_', 'update'));\n+              self.audioBuffer_.addEventListener('updateend',\n+                                                 aggregateUpdateHandler(self, 'videoBuffer_', 'updateend'));\n+            }\n+          }\n+\n+          // Add the segments to the pendingBuffers array\n+          self.pendingBuffers_.push(segment);\n+        } else if (event.data.action === 'done') {\n+          // All buffers should have been flushed from the muxer\n+          // start processing anything we have received\n+          self.processPendingSegments_();\n         }\n-        buffer.appendBuffer(event.data);\n-      }.bind(this));\n-\n-      // aggregate buffer events\n-      this.audioBuffer_.addEventListener('updatestart',\n-                                         aggregateUpdateHandler(this, this.videoBuffer_, 'updatestart'));\n-      this.videoBuffer_.addEventListener('updatestart',\n-                                         aggregateUpdateHandler(this, this.audioBuffer_, 'updatestart'));\n-      this.audioBuffer_.addEventListener('update',\n-                                         aggregateUpdateHandler(this, this.videoBuffer_, 'update'));\n-      this.videoBuffer_.addEventListener('update',\n-                                         aggregateUpdateHandler(this, this.audioBuffer_, 'update'));\n-      this.audioBuffer_.addEventListener('updateend',\n-                                         aggregateUpdateHandler(this, this.videoBuffer_, 'updateend'));\n-      this.videoBuffer_.addEventListener('updateend',\n-                                         aggregateUpdateHandler(this, this.audioBuffer_, 'updateend'));\n+      };\n \n       // this buffer is \"updating\" if either of its native buffers are\n       Object.defineProperty(this, 'updating', {\n         get: function() {\n-          return this.audioUpdating_ || this.videoUpdating_ ||\n-            this.audioBuffer_.updating || this.videoBuffer_.updating;\n+          return this.bufferUpdating_ ||\n+            (this.audioBuffer_ && this.audioBuffer_.updating) ||\n+            (this.videoBuffer_ && this.videoBuffer_.updating);\n         }\n       });\n       // the buffered property is the intersection of the buffered\n       // ranges of the native source buffers\n       Object.defineProperty(this, 'buffered', {\n         get: function() {\n-          var start, end;\n-          if (this.videoBuffer_.buffered.length === 0 ||\n-              this.audioBuffer_.buffered.length === 0) {\n+          var\n+            start,\n+            end,\n+            starts = [],\n+            ends = [],\n+            lastIndex;\n+\n+          // Handle the case where there is no buffer\n+          if ((this.videoBuffer_ && this.videoBuffer_.buffered.length === 0) ||\n+              (this.audioBuffer_ && this.audioBuffer_.buffered.length === 0)) {\n             return videojs.createTimeRange();\n           }\n-          start = Math.max(this.videoBuffer_.buffered.start(0),\n-                           this.audioBuffer_.buffered.start(0));\n-          end = Math.min(this.videoBuffer_.buffered.end(0),\n-                         this.audioBuffer_.buffered.end(0));\n+\n+          // TODO: Calculate and return the true intersection of the buffered\n+          //       property\n+          if (this.videoBuffer_) {\n+            lastIndex = this.videoBuffer_.buffered.length - 1;\n+            starts.push(this.videoBuffer_.buffered.start(0));\n+            ends.push(this.videoBuffer_.buffered.end(lastIndex));\n+          }\n+          if (this.audioBuffer_) {\n+            lastIndex = this.audioBuffer_.buffered.length - 1;\n+            starts.push(this.audioBuffer_.buffered.start(0));\n+            ends.push(this.audioBuffer_.buffered.end(lastIndex));\n+          }\n+\n+          start = Math.max.apply(Math, starts);\n+          end = Math.min.apply(Math, ends);\n           return videojs.createTimeRange(start, end);\n         }\n       });\n     },\n     appendBuffer: function(segment) {\n-      this.audioUpdating_ = this.videoUpdating_ = true;\n-      this.transmuxer_.push(segment);\n-      this.transmuxer_.flush();\n+      // Start the internal \"updating\" state\n+      this.bufferUpdating_ = true;\n+\n+      this.transmuxer_.postMessage({action: 'push', data: segment.buffer}, [segment.buffer]);\n+      this.transmuxer_.postMessage({action: 'flush'});\n+    },\n+    /**\n+     * Process any segments that the muxer has output\n+     * Concatenate segments together based on type and append them into\n+     * their respective sourceBuffers\n+     */\n+    processPendingSegments_: function() {\n+      var segment, buffer, i, offset,\n+        videoSegments = [],\n+        audioSegments = [],\n+        videoBytes = 0,\n+        audioBytes = 0;\n+\n+      // Sort segments into separate video/audio arrays and\n+      // keep track of their total byte lengths\n+      while ((segment = this.pendingBuffers_.shift())) {","path":"src/videojs-media-sources.js","position":196,"original_position":196,"commit_id":"c97fc7089293256f73b48b9e46a77b14899f3ea8","original_commit_id":"e1d9b82573ffac149d221c7f46a66cfd7209f75a","user":{"login":"imbcmdth","id":162465,"avatar_url":"https://avatars.githubusercontent.com/u/162465?v=3","gravatar_id":"","url":"https://api.github.com/users/imbcmdth","html_url":"https://github.com/imbcmdth","followers_url":"https://api.github.com/users/imbcmdth/followers","following_url":"https://api.github.com/users/imbcmdth/following{/other_user}","gists_url":"https://api.github.com/users/imbcmdth/gists{/gist_id}","starred_url":"https://api.github.com/users/imbcmdth/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/imbcmdth/subscriptions","organizations_url":"https://api.github.com/users/imbcmdth/orgs","repos_url":"https://api.github.com/users/imbcmdth/repos","events_url":"https://api.github.com/users/imbcmdth/events{/privacy}","received_events_url":"https://api.github.com/users/imbcmdth/received_events","type":"User","site_admin":false},"body":"That's it. A reduce it is!","created_at":"2015-09-02T14:56:21Z","updated_at":"2015-09-02T14:56:21Z","html_url":"https://github.com/videojs/videojs-contrib-media-sources/pull/32#discussion_r38541494","pull_request_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/pulls/32","_links":{"self":{"href":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/pulls/comments/38541494"},"html":{"href":"https://github.com/videojs/videojs-contrib-media-sources/pull/32#discussion_r38541494"},"pull_request":{"href":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/pulls/32"}}},"pull_request":{"url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/pulls/32","id":43931934,"html_url":"https://github.com/videojs/videojs-contrib-media-sources/pull/32","diff_url":"https://github.com/videojs/videojs-contrib-media-sources/pull/32.diff","patch_url":"https://github.com/videojs/videojs-contrib-media-sources/pull/32.patch","issue_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/issues/32","number":32,"state":"open","locked":false,"title":"Make Transmuxer WebWorker and Defer creation of SourceBuffers","user":{"login":"imbcmdth","id":162465,"avatar_url":"https://avatars.githubusercontent.com/u/162465?v=3","gravatar_id":"","url":"https://api.github.com/users/imbcmdth","html_url":"https://github.com/imbcmdth","followers_url":"https://api.github.com/users/imbcmdth/followers","following_url":"https://api.github.com/users/imbcmdth/following{/other_user}","gists_url":"https://api.github.com/users/imbcmdth/gists{/gist_id}","starred_url":"https://api.github.com/users/imbcmdth/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/imbcmdth/subscriptions","organizations_url":"https://api.github.com/users/imbcmdth/orgs","repos_url":"https://api.github.com/users/imbcmdth/repos","events_url":"https://api.github.com/users/imbcmdth/events{/privacy}","received_events_url":"https://api.github.com/users/imbcmdth/received_events","type":"User","site_admin":false},"body":"* Make a transmuxer WebWorker.\r\n* Include a build system to inline the WebWorker + `importScripts` into a blob.\r\n* Defer the creation of `SourceBuffers` until after we start getting segments back from the transmuxer so that we know what SourceBuffers need to be created (Audio-only, Video-only, or both.)\r\n* Fix tests!","created_at":"2015-09-01T21:58:42Z","updated_at":"2015-09-02T14:56:21Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a7200883359a8b6041803e4b936e5d679ad41250","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/pulls/32/commits","review_comments_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/pulls/32/comments","review_comment_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/pulls/comments{/number}","comments_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/issues/32/comments","statuses_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/statuses/c97fc7089293256f73b48b9e46a77b14899f3ea8","head":{"label":"imbcmdth:defer-addsourcebuffer","ref":"defer-addsourcebuffer","sha":"c97fc7089293256f73b48b9e46a77b14899f3ea8","user":{"login":"imbcmdth","id":162465,"avatar_url":"https://avatars.githubusercontent.com/u/162465?v=3","gravatar_id":"","url":"https://api.github.com/users/imbcmdth","html_url":"https://github.com/imbcmdth","followers_url":"https://api.github.com/users/imbcmdth/followers","following_url":"https://api.github.com/users/imbcmdth/following{/other_user}","gists_url":"https://api.github.com/users/imbcmdth/gists{/gist_id}","starred_url":"https://api.github.com/users/imbcmdth/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/imbcmdth/subscriptions","organizations_url":"https://api.github.com/users/imbcmdth/orgs","repos_url":"https://api.github.com/users/imbcmdth/repos","events_url":"https://api.github.com/users/imbcmdth/events{/privacy}","received_events_url":"https://api.github.com/users/imbcmdth/received_events","type":"User","site_admin":false},"repo":{"id":40723260,"name":"videojs-contrib-media-sources","full_name":"imbcmdth/videojs-contrib-media-sources","owner":{"login":"imbcmdth","id":162465,"avatar_url":"https://avatars.githubusercontent.com/u/162465?v=3","gravatar_id":"","url":"https://api.github.com/users/imbcmdth","html_url":"https://github.com/imbcmdth","followers_url":"https://api.github.com/users/imbcmdth/followers","following_url":"https://api.github.com/users/imbcmdth/following{/other_user}","gists_url":"https://api.github.com/users/imbcmdth/gists{/gist_id}","starred_url":"https://api.github.com/users/imbcmdth/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/imbcmdth/subscriptions","organizations_url":"https://api.github.com/users/imbcmdth/orgs","repos_url":"https://api.github.com/users/imbcmdth/repos","events_url":"https://api.github.com/users/imbcmdth/events{/privacy}","received_events_url":"https://api.github.com/users/imbcmdth/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/imbcmdth/videojs-contrib-media-sources","description":"Code for working with the media source extensions API and video.js","fork":true,"url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources","forks_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/forks","keys_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/keys{/key_id}","collaborators_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/teams","hooks_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/hooks","issue_events_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/issues/events{/number}","events_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/events","assignees_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/assignees{/user}","branches_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/branches{/branch}","tags_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/tags","blobs_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/git/refs{/sha}","trees_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/git/trees{/sha}","statuses_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/statuses/{sha}","languages_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/languages","stargazers_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/stargazers","contributors_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/contributors","subscribers_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/subscribers","subscription_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/subscription","commits_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/commits{/sha}","git_commits_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/git/commits{/sha}","comments_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/comments{/number}","issue_comment_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/issues/comments{/number}","contents_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/contents/{+path}","compare_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/compare/{base}...{head}","merges_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/merges","archive_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/downloads","issues_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/issues{/number}","pulls_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/pulls{/number}","milestones_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/milestones{/number}","notifications_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/labels{/name}","releases_url":"https://api.github.com/repos/imbcmdth/videojs-contrib-media-sources/releases{/id}","created_at":"2015-08-14T15:51:27Z","updated_at":"2015-08-14T15:51:27Z","pushed_at":"2015-09-01T22:13:57Z","git_url":"git://github.com/imbcmdth/videojs-contrib-media-sources.git","ssh_url":"git@github.com:imbcmdth/videojs-contrib-media-sources.git","clone_url":"https://github.com/imbcmdth/videojs-contrib-media-sources.git","svn_url":"https://github.com/imbcmdth/videojs-contrib-media-sources","homepage":null,"size":337,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"videojs:mse-mp2t-polyfill","ref":"mse-mp2t-polyfill","sha":"fd81c12dfd7003a159e03cdae99e9c35327d1b58","user":{"login":"videojs","id":3287189,"avatar_url":"https://avatars.githubusercontent.com/u/3287189?v=3","gravatar_id":"","url":"https://api.github.com/users/videojs","html_url":"https://github.com/videojs","followers_url":"https://api.github.com/users/videojs/followers","following_url":"https://api.github.com/users/videojs/following{/other_user}","gists_url":"https://api.github.com/users/videojs/gists{/gist_id}","starred_url":"https://api.github.com/users/videojs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/videojs/subscriptions","organizations_url":"https://api.github.com/users/videojs/orgs","repos_url":"https://api.github.com/users/videojs/repos","events_url":"https://api.github.com/users/videojs/events{/privacy}","received_events_url":"https://api.github.com/users/videojs/received_events","type":"Organization","site_admin":false},"repo":{"id":13849292,"name":"videojs-contrib-media-sources","full_name":"videojs/videojs-contrib-media-sources","owner":{"login":"videojs","id":3287189,"avatar_url":"https://avatars.githubusercontent.com/u/3287189?v=3","gravatar_id":"","url":"https://api.github.com/users/videojs","html_url":"https://github.com/videojs","followers_url":"https://api.github.com/users/videojs/followers","following_url":"https://api.github.com/users/videojs/following{/other_user}","gists_url":"https://api.github.com/users/videojs/gists{/gist_id}","starred_url":"https://api.github.com/users/videojs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/videojs/subscriptions","organizations_url":"https://api.github.com/users/videojs/orgs","repos_url":"https://api.github.com/users/videojs/repos","events_url":"https://api.github.com/users/videojs/events{/privacy}","received_events_url":"https://api.github.com/users/videojs/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/videojs/videojs-contrib-media-sources","description":"Code for working with the media source extensions API and video.js","fork":false,"url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources","forks_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/forks","keys_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/keys{/key_id}","collaborators_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/teams","hooks_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/hooks","issue_events_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/issues/events{/number}","events_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/events","assignees_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/assignees{/user}","branches_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/branches{/branch}","tags_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/tags","blobs_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/git/refs{/sha}","trees_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/git/trees{/sha}","statuses_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/statuses/{sha}","languages_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/languages","stargazers_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/stargazers","contributors_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/contributors","subscribers_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/subscribers","subscription_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/subscription","commits_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/commits{/sha}","git_commits_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/git/commits{/sha}","comments_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/comments{/number}","issue_comment_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/issues/comments{/number}","contents_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/contents/{+path}","compare_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/compare/{base}...{head}","merges_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/merges","archive_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/downloads","issues_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/issues{/number}","pulls_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/pulls{/number}","milestones_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/milestones{/number}","notifications_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/labels{/name}","releases_url":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/releases{/id}","created_at":"2013-10-25T02:01:24Z","updated_at":"2015-08-15T15:58:37Z","pushed_at":"2015-09-01T22:13:57Z","git_url":"git://github.com/videojs/videojs-contrib-media-sources.git","ssh_url":"git@github.com:videojs/videojs-contrib-media-sources.git","clone_url":"https://github.com/videojs/videojs-contrib-media-sources.git","svn_url":"https://github.com/videojs/videojs-contrib-media-sources","homepage":null,"size":657,"stargazers_count":47,"watchers_count":47,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":40,"mirror_url":null,"open_issues_count":11,"forks":40,"open_issues":11,"watchers":47,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/pulls/32"},"html":{"href":"https://github.com/videojs/videojs-contrib-media-sources/pull/32"},"issue":{"href":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/issues/32"},"comments":{"href":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/issues/32/comments"},"review_comments":{"href":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/pulls/32/comments"},"review_comment":{"href":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/pulls/32/commits"},"statuses":{"href":"https://api.github.com/repos/videojs/videojs-contrib-media-sources/statuses/c97fc7089293256f73b48b9e46a77b14899f3ea8"}}}}