srsRtc.js 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. export class SrsRTC {
  2. constructor(url){
  3. this.stream = new MediaStream();
  4. this.url = url;
  5. this.offer = null;
  6. this.pc =null;
  7. // this.pc = new RTCPeerConnection(null);
  8. // this.pc.ontrack = (event) => {
  9. // // https://webrtc.org/getting-started/remote-streams
  10. // console.warn('event',event.track)
  11. // if(this.stream){
  12. // this.stream.addTrack(event.track);
  13. // }
  14. // };
  15. }
  16. close(){
  17. var remoteVideo = document.querySelector("#testVideoFeed");
  18. if(remoteVideo.srcObject){
  19. remoteVideo.srcObject.getTracks().forEach(track => track.stop());
  20. }
  21. this.pc && this.pc.close();
  22. this.pc = null;
  23. }
  24. async getVideo(clipUrl){
  25. if(!this.pc){
  26. this.pc = new RTCPeerConnection(null);
  27. this.pc.ontrack = (event) => {
  28. // https://webrtc.org/getting-started/remote-streams
  29. console.log('event',event)
  30. if(this.stream){
  31. // this.stream.removeTrack(event.track));
  32. const videoTrack = this.stream.getVideoTracks().find(i=>i.kind ==='video')
  33. console.log('旧videoTrack',videoTrack)
  34. if(videoTrack){
  35. this.stream.removeTrack(videoTrack);
  36. }
  37. // if(this.stream.removeTrack())
  38. this.stream.addTrack(event.track);
  39. }
  40. const mediaRecorder = new MediaRecorder(event.streams[0]);
  41. console.log('mediaRecorder',mediaRecorder)
  42. // mediaRecorder.
  43. };
  44. }
  45. this.pc.addTransceiver("video", {direction: "recvonly"});
  46. const serverApi ='https://demo-kms.4dage.com:443/rtc/v1/play/';
  47. const tid = Number(parseInt(new Date().getTime()*Math.random()*100)).toString(16).slice(0, 7);
  48. var offer = await this.pc.createOffer();
  49. this.offer = offer;
  50. await this.pc.setLocalDescription(offer);
  51. const session = await new Promise(function(resolve, reject) {
  52. // @see https://github.com/rtcdn/rtcdn-draft
  53. var data = {
  54. api: serverApi,
  55. tid: tid,
  56. streamurl: clipUrl,
  57. clientip: null,
  58. sdp: offer.sdp
  59. };
  60. console.log("Generated offer: ", data);
  61. $.ajax({
  62. type: "POST", url: serverApi, data: JSON.stringify(data),
  63. contentType:'application/json', dataType: 'json'
  64. }).done(function(data) {
  65. console.log("Got answer: ", data);
  66. if (data.code) {
  67. reject(data); return;
  68. }
  69. resolve(data);
  70. }).fail(function(reason){
  71. reject(reason);
  72. });
  73. });
  74. await this.pc.setRemoteDescription(
  75. new RTCSessionDescription({type: 'answer', sdp: session.sdp})
  76. );
  77. return session;
  78. }
  79. }