项目作者: versatica

项目描述 :
mediasoup client side JavaScript library
高级语言: JavaScript
项目地址: git://github.com/versatica/mediasoup-client.git
创建时间: 2017-07-18T16:44:51Z
项目社区:https://github.com/versatica/mediasoup-client

开源协议:ISC License

下载


mediasoup-client v3



TypeScript client side library for building mediasoup based applications.

Website and Documentation

Support Forum

Usage Example

  1. import { Device } from 'mediasoup-client';
  2. import mySignaling from './my-signaling'; // Our own signaling stuff.
  3. // Create a device (use browser auto-detection).
  4. const device = new Device();
  5. // Communicate with our server app to retrieve router RTP capabilities.
  6. const routerRtpCapabilities = await mySignaling.request(
  7. 'getRouterCapabilities'
  8. );
  9. // Load the device with the router RTP capabilities.
  10. await device.load({ routerRtpCapabilities });
  11. // Check whether we can produce video to the router.
  12. if (!device.canProduce('video')) {
  13. console.warn('cannot produce video');
  14. // Abort next steps.
  15. }
  16. // Create a transport in the server for sending our media through it.
  17. const { id, iceParameters, iceCandidates, dtlsParameters, sctpParameters } =
  18. await mySignaling.request('createTransport', {
  19. sctpCapabilities: device.sctpCapabilities,
  20. });
  21. // Create the local representation of our server-side transport.
  22. const sendTransport = device.createSendTransport({
  23. id,
  24. iceParameters,
  25. iceCandidates,
  26. dtlsParameters,
  27. sctpParameters,
  28. });
  29. // Set transport "connect" event handler.
  30. sendTransport.on('connect', async ({ dtlsParameters }, callback, errback) => {
  31. // Here we must communicate our local parameters to our remote transport.
  32. try {
  33. await mySignaling.request('transport-connect', {
  34. transportId: sendTransport.id,
  35. dtlsParameters,
  36. });
  37. // Done in the server, tell our transport.
  38. callback();
  39. } catch (error) {
  40. // Something was wrong in server side.
  41. errback(error);
  42. }
  43. });
  44. // Set transport "produce" event handler.
  45. sendTransport.on(
  46. 'produce',
  47. async ({ kind, rtpParameters, appData }, callback, errback) => {
  48. // Here we must communicate our local parameters to our remote transport.
  49. try {
  50. const { id } = await mySignaling.request('produce', {
  51. transportId: sendTransport.id,
  52. kind,
  53. rtpParameters,
  54. appData,
  55. });
  56. // Done in the server, pass the response to our transport.
  57. callback({ id });
  58. } catch (error) {
  59. // Something was wrong in server side.
  60. errback(error);
  61. }
  62. }
  63. );
  64. // Set transport "producedata" event handler.
  65. sendTransport.on(
  66. 'producedata',
  67. async (
  68. { sctpStreamParameters, label, protocol, appData },
  69. callback,
  70. errback
  71. ) => {
  72. // Here we must communicate our local parameters to our remote transport.
  73. try {
  74. const { id } = await mySignaling.request('produceData', {
  75. transportId: sendTransport.id,
  76. sctpStreamParameters,
  77. label,
  78. protocol,
  79. appData,
  80. });
  81. // Done in the server, pass the response to our transport.
  82. callback({ id });
  83. } catch (error) {
  84. // Something was wrong in server side.
  85. errback(error);
  86. }
  87. }
  88. );
  89. // Produce our webcam video.
  90. const stream = await navigator.mediaDevices.getUserMedia({ video: true });
  91. const webcamTrack = stream.getVideoTracks()[0];
  92. const webcamProducer = await sendTransport.produce({ track: webcamTrack });
  93. // Produce data (DataChannel).
  94. const dataProducer = await sendTransport.produceData({
  95. ordered: true,
  96. label: 'foo',
  97. });

Authors

Social

Sponsor

You can support mediasoup by sponsoring it. Thanks!

License

ISC