您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

functions.js 2.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import { MEDIA_TYPE } from '../media';
  2. /**
  3. * Returns local audio track.
  4. *
  5. * @param {Track[]} tracks - List of all tracks.
  6. * @returns {(Track|undefined)}
  7. */
  8. export function getLocalAudioTrack(tracks) {
  9. return getLocalTrack(tracks, MEDIA_TYPE.AUDIO);
  10. }
  11. /**
  12. * Returns local track by media type.
  13. *
  14. * @param {Track[]} tracks - List of all tracks.
  15. * @param {MEDIA_TYPE} mediaType - Media type.
  16. * @returns {(Track|undefined)}
  17. */
  18. export function getLocalTrack(tracks, mediaType) {
  19. return tracks.find(t => t.local && t.mediaType === mediaType);
  20. }
  21. /**
  22. * Returns local video track.
  23. *
  24. * @param {Track[]} tracks - List of all tracks.
  25. * @returns {(Track|undefined)}
  26. */
  27. export function getLocalVideoTrack(tracks) {
  28. return getLocalTrack(tracks, MEDIA_TYPE.VIDEO);
  29. }
  30. /**
  31. * Returns track of specified media type for specified participant id.
  32. *
  33. * @param {Track[]} tracks - List of all tracks.
  34. * @param {MEDIA_TYPE} mediaType - Media type.
  35. * @param {string} participantId - Participant ID.
  36. * @returns {(Track|undefined)}
  37. */
  38. export function getTrackByMediaTypeAndParticipant(
  39. tracks,
  40. mediaType,
  41. participantId) {
  42. return tracks.find(
  43. t => t.participantId === participantId && t.mediaType === mediaType
  44. );
  45. }
  46. /**
  47. * Returns the track if any which corresponds to a specific instance
  48. * of JitsiLocalTrack or JitsiRemoteTrack.
  49. *
  50. * @param {Track[]} tracks - List of all tracks.
  51. * @param {(JitsiLocalTrack|JitsiRemoteTrack)} jitsiTrack - JitsiTrack instance.
  52. * @returns {(Track|undefined)}
  53. */
  54. export function getTrackByJitsiTrack(tracks, jitsiTrack) {
  55. return tracks.find(t => t.jitsiTrack === jitsiTrack);
  56. }
  57. /**
  58. * Returns tracks of specified media type.
  59. *
  60. * @param {Track[]} tracks - List of all tracks.
  61. * @param {MEDIA_TYPE} mediaType - Media type.
  62. * @returns {Track[]}
  63. */
  64. export function getTracksByMediaType(tracks, mediaType) {
  65. return tracks.filter(t => t.mediaType === mediaType);
  66. }
  67. /**
  68. * Mutes or unmutes a specific <tt>JitsiLocalTrack</tt>. If the muted state of
  69. * the specified <tt>track</tt> is already in accord with the specified
  70. * <tt>muted</tt> value, then does nothing.
  71. *
  72. * @param {JitsiLocalTrack} track - The <tt>JitsiLocalTrack</tt> to mute or
  73. * unmute.
  74. * @param {boolean} muted - If the specified <tt>track</tt> is to be muted, then
  75. * <tt>true</tt>; otherwise, <tt>false</tt>.
  76. * @returns {Promise}
  77. */
  78. export function setTrackMuted(track, muted) {
  79. if (track.isMuted() === muted) {
  80. return Promise.resolve();
  81. }
  82. const f = muted ? 'mute' : 'unmute';
  83. return track[f]()
  84. .catch(err => {
  85. console.warn(`Track ${f} was rejected:`, err);
  86. throw err;
  87. });
  88. }