正在显示
3 个修改的文件
包含
161 行增加
和
83 行删除
trunk/research/players/js/srs.page.js
100644 → 100755
| @@ -286,19 +286,19 @@ function srs_chat_initialize_page( | @@ -286,19 +286,19 @@ function srs_chat_initialize_page( | ||
| 286 | 286 | ||
| 287 | //var gops = ["0.3", "0.5", "1", "2", "3", "4", | 287 | //var gops = ["0.3", "0.5", "1", "2", "3", "4", |
| 288 | // "5", "6", "7", "8", "9", "10", "15", "20"]; | 288 | // "5", "6", "7", "8", "9", "10", "15", "20"]; |
| 289 | - $(sl_gop + " option[value='0.5']").attr("selected", true); | 289 | + $(sl_gop + " option[value='1']").attr("selected", true); |
| 290 | 290 | ||
| 291 | //var sizes = ["176x144", "320x240", "352x240", | 291 | //var sizes = ["176x144", "320x240", "352x240", |
| 292 | // "352x288", "460x240", "640x480", "720x480", "720x576", "800x600", | 292 | // "352x288", "460x240", "640x480", "720x480", "720x576", "800x600", |
| 293 | // "1024x768", "1280x720", "1360x768", "1920x1080"]; | 293 | // "1024x768", "1280x720", "1360x768", "1920x1080"]; |
| 294 | - $(sl_size + " option[value='320x240']").attr("selected", true); | 294 | + $(sl_size + " option[value='640x480']").attr("selected", true); |
| 295 | 295 | ||
| 296 | //var fpses = ["5", "10", "15", "20", "24", "25", "29.97", "30"]; | 296 | //var fpses = ["5", "10", "15", "20", "24", "25", "29.97", "30"]; |
| 297 | - $(sl_fps + " option[value='10']").attr("selected", true); | 297 | + $(sl_fps + " option[value='15']").attr("selected", true); |
| 298 | 298 | ||
| 299 | //var bitrates = ["50", "200", "350", "500", "650", "800", | 299 | //var bitrates = ["50", "200", "350", "500", "650", "800", |
| 300 | // "950", "1000", "1200", "1500", "1800", "2000", "3000", "5000"]; | 300 | // "950", "1000", "1200", "1500", "1800", "2000", "3000", "5000"]; |
| 301 | - $(sl_bitrate + " option[value='200']").attr("selected", true); | 301 | + $(sl_bitrate + " option[value='350']").attr("selected", true); |
| 302 | } | 302 | } |
| 303 | /** | 303 | /** |
| 304 | * get the vcodec and acodec. | 304 | * get the vcodec and acodec. |
| @@ -87,6 +87,9 @@ SrsPublisher.prototype.start = function() { | @@ -87,6 +87,9 @@ SrsPublisher.prototype.start = function() { | ||
| 87 | * @param acodec an object contains the audio codec info. | 87 | * @param acodec an object contains the audio codec info. |
| 88 | */ | 88 | */ |
| 89 | SrsPublisher.prototype.publish = function(url, vcodec, acodec) { | 89 | SrsPublisher.prototype.publish = function(url, vcodec, acodec) { |
| 90 | + this.stop(); | ||
| 91 | + SrsPublisher.__publishers.push(this); | ||
| 92 | + | ||
| 90 | if (url) { | 93 | if (url) { |
| 91 | this.url = url; | 94 | this.url = url; |
| 92 | } | 95 | } |
| @@ -100,6 +103,17 @@ SrsPublisher.prototype.publish = function(url, vcodec, acodec) { | @@ -100,6 +103,17 @@ SrsPublisher.prototype.publish = function(url, vcodec, acodec) { | ||
| 100 | this.callbackObj.ref.__publish(this.url, this.width, this.height, this.vcodec, this.acodec); | 103 | this.callbackObj.ref.__publish(this.url, this.width, this.height, this.vcodec, this.acodec); |
| 101 | } | 104 | } |
| 102 | SrsPublisher.prototype.stop = function() { | 105 | SrsPublisher.prototype.stop = function() { |
| 106 | + for (var i = 0; i < SrsPublisher.__publishers.length; i++) { | ||
| 107 | + var player = SrsPublisher.__publishers[i]; | ||
| 108 | + | ||
| 109 | + if (player.id != this.id) { | ||
| 110 | + continue; | ||
| 111 | + } | ||
| 112 | + | ||
| 113 | + SrsPublisher.__publishers.splice(i, 1); | ||
| 114 | + break; | ||
| 115 | + } | ||
| 116 | + | ||
| 103 | this.callbackObj.ref.__stop(); | 117 | this.callbackObj.ref.__stop(); |
| 104 | } | 118 | } |
| 105 | /** | 119 | /** |
| @@ -86,6 +86,16 @@ | @@ -86,6 +86,16 @@ | ||
| 86 | realtime_player.start(); | 86 | realtime_player.start(); |
| 87 | } | 87 | } |
| 88 | 88 | ||
| 89 | + // 2x8 users | ||
| 90 | + for (var i = 0; i < 8; i++) { | ||
| 91 | + var tr = $("<tr></tr>").hide(); | ||
| 92 | + $("#lst_chats").append(tr); | ||
| 93 | + | ||
| 94 | + for (var j = 0; j < 2; j++) { | ||
| 95 | + tr.append($("<td></td>").attr("id", "td_" + (i * 8 + j))); | ||
| 96 | + } | ||
| 97 | + } | ||
| 98 | + | ||
| 89 | api_server = "http://" + query.hostname + ":" + srs_get_api_server_port() + "/api/v1/chats"; | 99 | api_server = "http://" + query.hostname + ":" + srs_get_api_server_port() + "/api/v1/chats"; |
| 90 | refresh(); | 100 | refresh(); |
| 91 | }); | 101 | }); |
| @@ -187,89 +197,44 @@ | @@ -187,89 +197,44 @@ | ||
| 187 | } | 197 | } |
| 188 | }); | 198 | }); |
| 189 | } | 199 | } |
| 190 | - function render_chat_room(chats) { | 200 | + function render_chat_room(original_chats) { |
| 191 | if (!self_chat) { | 201 | if (!self_chat) { |
| 192 | return; | 202 | return; |
| 193 | } | 203 | } |
| 194 | 204 | ||
| 195 | - // new added chat | ||
| 196 | - for (var i = 0; i < chats.length; i++) { | ||
| 197 | - var chat = chats[i]; | 205 | + var chats = []; |
| 206 | + for (var i = 0; i < original_chats.length; i++) { | ||
| 207 | + var chat = original_chats[i]; | ||
| 208 | + | ||
| 198 | // ignore the self. | 209 | // ignore the self. |
| 199 | if (self_chat && self_chat.id == chat.id) { | 210 | if (self_chat && self_chat.id == chat.id) { |
| 200 | continue; | 211 | continue; |
| 201 | } | 212 | } |
| 202 | 213 | ||
| 214 | + chats.push(chat); | ||
| 215 | + } | ||
| 216 | + | ||
| 217 | + // new added chat | ||
| 218 | + for (var i = 0; i < chats.length; i++) { | ||
| 219 | + var chat = chats[i]; | ||
| 220 | + | ||
| 203 | // if previous exists, ignore, only add new here. | 221 | // if previous exists, ignore, only add new here. |
| 204 | var previous_chat = get_previous_chat_user(previous_chats, chat.id); | 222 | var previous_chat = get_previous_chat_user(previous_chats, chat.id); |
| 205 | if (previous_chat) { | 223 | if (previous_chat) { |
| 206 | // update reference. | 224 | // update reference. |
| 225 | + chat.ui = previous_chat.ui; | ||
| 226 | + chat.parent = previous_chat.parent; | ||
| 207 | chat.player = previous_chat.player; | 227 | chat.player = previous_chat.player; |
| 208 | - chat.player.private_object = chat; | ||
| 209 | - continue; | ||
| 210 | - } | ||
| 211 | - | ||
| 212 | - global_chat_user_id++; | ||
| 213 | - | ||
| 214 | - // username: a str indicates the user name. | ||
| 215 | - // url: a str indicates the url of user stream. | ||
| 216 | - // join_date: a str indicates the join timestamp in seconds. | ||
| 217 | - // join_date_str: friendly formated time. | ||
| 218 | - var obj = $("<div/>").html($("#template").html()); | ||
| 219 | - $(obj).attr("chat_id", chat.id); | ||
| 220 | - $(obj).attr("id", "div_" + chat.id); // for specifed chat: $("#div_" + chat_id) | ||
| 221 | - $(obj).attr("class", "div_chat"); // for all chats: $(".div_chat") | ||
| 222 | - $(obj).find("#chat_player").attr("id", "rp_" + chat.id); // for specifed player: $("#rp_" + chat_id) | ||
| 223 | - $(obj).find("#chat_player_raw").attr("id", "rp_raw_" + chat.id); // for specifed player: $("#rp_raw_" + chat_id) | ||
| 224 | - $(obj).find("#user_name").text(chat.username); | ||
| 225 | - $(obj).find("#join_date").text(chat.join_date_str); | ||
| 226 | - $(obj).find("#collapseM").attr("id", "collapse_" + global_chat_user_id); | ||
| 227 | - $(obj).find("#headerN").attr("href", "#collapse_" + global_chat_user_id); | ||
| 228 | - | ||
| 229 | - $("#lst_chats").append(obj); | ||
| 230 | - | ||
| 231 | - if (!no_play) { | ||
| 232 | - // start the realtime player. | ||
| 233 | - var _player = new SrsPlayer("rp_raw_" + chat.id, 600, 300, chat); | ||
| 234 | - _player.on_player_ready = function() { | ||
| 235 | - this.set_bt(0.5); | ||
| 236 | - }; | ||
| 237 | - _player.on_player_metadata = function(metadata) { | ||
| 238 | - this.set_dar(0, 0); | ||
| 239 | - this.set_fs("screen", 100); | 228 | + if (chat.player) { |
| 229 | + chat.player.private_object = chat; | ||
| 240 | } | 230 | } |
| 241 | - _player.start(chat.url); | ||
| 242 | - | ||
| 243 | - chat.player = _player; | ||
| 244 | - } else { | ||
| 245 | - chat.player = null; | 231 | + continue; |
| 246 | } | 232 | } |
| 247 | - | ||
| 248 | - $(obj).find("#collapse_main").on('hidden', function(){ | ||
| 249 | - var id = $(this).parent().attr("chat_id"); | ||
| 250 | - var chat = get_previous_chat_user(previous_chats, id); | ||
| 251 | - if (!chat || !chat.player) { | ||
| 252 | - return; | ||
| 253 | - } | ||
| 254 | - chat.player.stop(); | ||
| 255 | - }); | ||
| 256 | - $(obj).find("#collapse_main").on('shown', function(){ | ||
| 257 | - var id = $(this).parent().attr("chat_id"); | ||
| 258 | - var chat = get_previous_chat_user(previous_chats, id); | ||
| 259 | - if (!chat || !chat.player) { | ||
| 260 | - return; | ||
| 261 | - } | ||
| 262 | - chat.player.play(); | ||
| 263 | - }); | ||
| 264 | } | 233 | } |
| 265 | 234 | ||
| 266 | // removed chat | 235 | // removed chat |
| 267 | for (var i = 0; i < previous_chats.length; i++) { | 236 | for (var i = 0; i < previous_chats.length; i++) { |
| 268 | var chat = previous_chats[i]; | 237 | var chat = previous_chats[i]; |
| 269 | - // ignore the self. | ||
| 270 | - if (self_chat && self_chat.id == chat.id) { | ||
| 271 | - continue; | ||
| 272 | - } | ||
| 273 | 238 | ||
| 274 | var new_chat = get_previous_chat_user(chats, chat.id); | 239 | var new_chat = get_previous_chat_user(chats, chat.id); |
| 275 | if (new_chat) { | 240 | if (new_chat) { |
| @@ -282,6 +247,117 @@ | @@ -282,6 +247,117 @@ | ||
| 282 | $("#div_" + chat.id).remove(); | 247 | $("#div_" + chat.id).remove(); |
| 283 | } | 248 | } |
| 284 | 249 | ||
| 250 | + // hide empty rows. | ||
| 251 | + $("#lst_chats").find("tr").each(function(){ | ||
| 252 | + var empty = true; | ||
| 253 | + | ||
| 254 | + $(this).find("td").each(function(){ | ||
| 255 | + if ($(this).html() != "") { | ||
| 256 | + empty = false; | ||
| 257 | + return false; // abort each | ||
| 258 | + } | ||
| 259 | + return true; | ||
| 260 | + }); | ||
| 261 | + | ||
| 262 | + if (empty) { | ||
| 263 | + $(this).hide(); | ||
| 264 | + } | ||
| 265 | + }); | ||
| 266 | + | ||
| 267 | + // render the chat | ||
| 268 | + for (var i = 0; i < chats.length; i++) { | ||
| 269 | + var chat = chats[i]; | ||
| 270 | + | ||
| 271 | + // if redered, ignore. | ||
| 272 | + if (chat.parent) { | ||
| 273 | + continue; | ||
| 274 | + } | ||
| 275 | + | ||
| 276 | + // generate the ui of chat | ||
| 277 | + if (!chat.ui) { | ||
| 278 | + global_chat_user_id++; | ||
| 279 | + | ||
| 280 | + // username: a str indicates the user name. | ||
| 281 | + // url: a str indicates the url of user stream. | ||
| 282 | + // join_date: a str indicates the join timestamp in seconds. | ||
| 283 | + // join_date_str: friendly formated time. | ||
| 284 | + var obj = $("<div/>").html($("#template").html()); | ||
| 285 | + if (true) { | ||
| 286 | + // save current ui object to the chat. | ||
| 287 | + chat.ui = obj; | ||
| 288 | + | ||
| 289 | + $(obj).attr("chat_id", chat.id); | ||
| 290 | + $(obj).attr("id", "div_" + chat.id); // for specifed chat: $("#div_" + chat_id) | ||
| 291 | + $(obj).attr("class", "div_chat"); // for all chats: $(".div_chat") | ||
| 292 | + $(obj).find("#chat_player").attr("id", "rp_" + chat.id); // for specifed player: $("#rp_" + chat_id) | ||
| 293 | + $(obj).find("#chat_player_raw").attr("id", "rp_raw_" + chat.id); // for specifed player: $("#rp_raw_" + chat_id) | ||
| 294 | + $(obj).find("#user_name").text(chat.username); | ||
| 295 | + $(obj).find("#join_date").text(chat.join_date_str); | ||
| 296 | + $(obj).find("#collapseM").attr("id", "collapse_" + global_chat_user_id); | ||
| 297 | + $(obj).find("#headerN").attr("href", "#collapse_" + global_chat_user_id); | ||
| 298 | + } | ||
| 299 | + } | ||
| 300 | + | ||
| 301 | + // find a idle td to render the chat. | ||
| 302 | + var parent = null; | ||
| 303 | + $("#lst_chats").find("td").each(function(){ | ||
| 304 | + if ($(this).html() != "") { | ||
| 305 | + return true; | ||
| 306 | + } | ||
| 307 | + | ||
| 308 | + parent = $(this); | ||
| 309 | + return false; // abort each | ||
| 310 | + }); | ||
| 311 | + | ||
| 312 | + if (!parent) { | ||
| 313 | + warn("没有可用的位置展示流。"); | ||
| 314 | + break; | ||
| 315 | + } | ||
| 316 | + $(parent).append(chat.ui); | ||
| 317 | + $(parent).parent().show(); | ||
| 318 | + | ||
| 319 | + // when ui elements appent to the page, | ||
| 320 | + // create the player, or flash will failed. | ||
| 321 | + if (!chat.parent) { | ||
| 322 | + chat.parent = $(parent); | ||
| 323 | + | ||
| 324 | + if (!no_play) { | ||
| 325 | + // start the realtime player. | ||
| 326 | + var _player = new SrsPlayer("rp_raw_" + chat.id, 430, 185, chat); | ||
| 327 | + _player.on_player_ready = function() { | ||
| 328 | + this.set_bt(0.5); | ||
| 329 | + this.play(); | ||
| 330 | + }; | ||
| 331 | + _player.on_player_metadata = function(metadata) { | ||
| 332 | + this.set_dar(0, 0); | ||
| 333 | + this.set_fs("screen", 100); | ||
| 334 | + } | ||
| 335 | + _player.start(chat.url); | ||
| 336 | + | ||
| 337 | + chat.player = _player; | ||
| 338 | + } else { | ||
| 339 | + chat.player = null; | ||
| 340 | + } | ||
| 341 | + | ||
| 342 | + $(obj).find("#collapse_main").on('hidden', function(){ | ||
| 343 | + var id = $(this).parent().attr("chat_id"); | ||
| 344 | + var chat = get_previous_chat_user(previous_chats, id); | ||
| 345 | + if (!chat || !chat.player) { | ||
| 346 | + return; | ||
| 347 | + } | ||
| 348 | + chat.player.stop(); | ||
| 349 | + }); | ||
| 350 | + $(obj).find("#collapse_main").on('shown', function(){ | ||
| 351 | + var id = $(this).parent().attr("chat_id"); | ||
| 352 | + var chat = get_previous_chat_user(previous_chats, id); | ||
| 353 | + if (!chat || !chat.player) { | ||
| 354 | + return; | ||
| 355 | + } | ||
| 356 | + chat.player.play(); | ||
| 357 | + }); | ||
| 358 | + } | ||
| 359 | + } | ||
| 360 | + | ||
| 285 | previous_chats = chats; | 361 | previous_chats = chats; |
| 286 | } | 362 | } |
| 287 | function get_previous_chat_user(arr, id) { | 363 | function get_previous_chat_user(arr, id) { |
| @@ -325,10 +401,6 @@ | @@ -325,10 +401,6 @@ | ||
| 325 | // removed chat | 401 | // removed chat |
| 326 | for (var i = 0; i < previous_chats.length; i++) { | 402 | for (var i = 0; i < previous_chats.length; i++) { |
| 327 | var chat = previous_chats[i]; | 403 | var chat = previous_chats[i]; |
| 328 | - // ignore the self. | ||
| 329 | - if (self_chat && self_chat.id == chat.id) { | ||
| 330 | - continue; | ||
| 331 | - } | ||
| 332 | 404 | ||
| 333 | if (chat.player) { | 405 | if (chat.player) { |
| 334 | chat.player.stop(); | 406 | chat.player.stop(); |
| @@ -517,26 +589,18 @@ | @@ -517,26 +589,18 @@ | ||
| 517 | <img src="img/tooltip.png"/> | 589 | <img src="img/tooltip.png"/> |
| 518 | </span> | 590 | </span> |
| 519 | </div> | 591 | </div> |
| 520 | - <div id="collapseM" class="accordion-body collapse"> | 592 | + <div id="collapseM" class="accordion-body collapse in"> |
| 521 | <div class="accordion-inner"> | 593 | <div class="accordion-inner"> |
| 522 | - <div class="row-fluid"> | ||
| 523 | - <div class="span2"> | ||
| 524 | - </div> | ||
| 525 | - <div class="span8"> | ||
| 526 | - <div id="chat_player"> | ||
| 527 | - <div id="chat_player_raw"> | ||
| 528 | - </div> | ||
| 529 | - </div> | ||
| 530 | - </div> | ||
| 531 | - <div class="span2"> | 594 | + <div id="chat_player"> |
| 595 | + <div id="chat_player_raw"> | ||
| 532 | </div> | 596 | </div> |
| 533 | </div> | 597 | </div> |
| 534 | </div> | 598 | </div> |
| 535 | </div> | 599 | </div> |
| 536 | </div> | 600 | </div> |
| 537 | </div> | 601 | </div> |
| 538 | - <div class="container" id="lst_chats"> | ||
| 539 | - </div> | 602 | + <table id="lst_chats" class="table"> |
| 603 | + </table> | ||
| 540 | <div id="video_modal" class="modal hide fade"> | 604 | <div id="video_modal" class="modal hide fade"> |
| 541 | <div class="modal-header"> | 605 | <div class="modal-header"> |
| 542 | <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> | 606 | <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> |
-
请 注册 或 登录 后发表评论