@vpalmisano/webrtcperf 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +296 -0
  3. package/app.min.js +2 -0
  4. package/build/src/app.d.ts +6 -0
  5. package/build/src/app.js +207 -0
  6. package/build/src/app.js.map +1 -0
  7. package/build/src/config.d.ts +104 -0
  8. package/build/src/config.js +880 -0
  9. package/build/src/config.js.map +1 -0
  10. package/build/src/generate-config-docs.d.ts +1 -0
  11. package/build/src/generate-config-docs.js +41 -0
  12. package/build/src/generate-config-docs.js.map +1 -0
  13. package/build/src/index.d.ts +9 -0
  14. package/build/src/index.js +26 -0
  15. package/build/src/index.js.map +1 -0
  16. package/build/src/media.d.ts +33 -0
  17. package/build/src/media.js +113 -0
  18. package/build/src/media.js.map +1 -0
  19. package/build/src/rtcstats.d.ts +302 -0
  20. package/build/src/rtcstats.js +418 -0
  21. package/build/src/rtcstats.js.map +1 -0
  22. package/build/src/server.d.ts +173 -0
  23. package/build/src/server.js +639 -0
  24. package/build/src/server.js.map +1 -0
  25. package/build/src/session.d.ts +277 -0
  26. package/build/src/session.js +1552 -0
  27. package/build/src/session.js.map +1 -0
  28. package/build/src/stats.d.ts +243 -0
  29. package/build/src/stats.js +1383 -0
  30. package/build/src/stats.js.map +1 -0
  31. package/build/src/utils.d.ts +249 -0
  32. package/build/src/utils.js +1220 -0
  33. package/build/src/utils.js.map +1 -0
  34. package/build/src/visqol.d.ts +6 -0
  35. package/build/src/visqol.js +61 -0
  36. package/build/src/visqol.js.map +1 -0
  37. package/build/src/vmaf.d.ts +83 -0
  38. package/build/src/vmaf.js +624 -0
  39. package/build/src/vmaf.js.map +1 -0
  40. package/build/tsconfig.tsbuildinfo +1 -0
  41. package/package.json +129 -0
  42. package/src/app.ts +241 -0
  43. package/src/config.ts +852 -0
  44. package/src/generate-config-docs.ts +47 -0
  45. package/src/index.ts +9 -0
  46. package/src/media.ts +151 -0
  47. package/src/rtcstats.ts +507 -0
  48. package/src/server.ts +645 -0
  49. package/src/session.ts +1908 -0
  50. package/src/stats.ts +1668 -0
  51. package/src/utils.ts +1295 -0
  52. package/src/visqol.ts +62 -0
  53. package/src/vmaf.ts +771 -0
package/src/visqol.ts ADDED
@@ -0,0 +1,62 @@
1
+ import { getFiles, logger, runShellCommand } from './utils'
2
+ import fs from 'fs'
3
+ import path from 'path'
4
+
5
+ const log = logger('webrtcperf:visqol')
6
+
7
+ interface VisqolConfig {
8
+ visqolPath: string
9
+ visqolKeepSourceFiles: boolean
10
+ }
11
+
12
+ export async function calculateVisqolScore(config: VisqolConfig): Promise<void> {
13
+ const { visqolPath, visqolKeepSourceFiles } = config
14
+ log.debug('calculateVisqolScore', { visqolPath, visqolKeepSourceFiles })
15
+
16
+ const ref = new Set<string>()
17
+ const deg = new Set<string>()
18
+
19
+ const files = await getFiles(visqolPath, '')
20
+ for (const file of files) {
21
+ if (!file.endsWith('.wav') && !file.endsWith('.f32le.raw')) continue
22
+ const isSender = path.basename(file).includes('_send_')
23
+ const isReceiver = path.basename(file).includes('_recv_')
24
+ if (!isReceiver && !isSender) {
25
+ continue
26
+ }
27
+ let outFile = file
28
+ if (file.endsWith('.f32le.raw')) {
29
+ outFile = path.join(path.dirname(file), path.basename(file).replace('.f32le.raw', '.wav'))
30
+ await runShellCommand(`ffmpeg -hide_banner -loglevel info -f f32le -ar 48000 -ac 1 -i ${file} -ac 1 ${outFile}`)
31
+ if (!visqolKeepSourceFiles) {
32
+ fs.unlinkSync(file)
33
+ }
34
+ }
35
+ if (isSender) {
36
+ ref.add(outFile)
37
+ } else if (isReceiver) {
38
+ deg.add(outFile)
39
+ }
40
+ }
41
+ for (const refFile of ref.values()) {
42
+ for (const degFile of deg.values()) {
43
+ log.info(`Calculating score ${refFile} -> ${degFile}`)
44
+ try {
45
+ await runShellCommand(
46
+ `/usr/bin/visqol --reference_file ${refFile} --degraded_file ${degFile} --similarity_to_quality_model /usr/share/visqol/model/tcdaudio14_aacvopus_coresv_svrnsim_n.68_g.01_c1.model --results_csv ${path.dirname(refFile)}/visqol.csv`,
47
+ )
48
+ } catch (e) {
49
+ log.error('Error calculating score:', (e as Error).stack)
50
+ }
51
+ }
52
+ }
53
+ }
54
+
55
+ if (require.main === module) {
56
+ ;(async (): Promise<void> => {
57
+ await calculateVisqolScore({
58
+ visqolPath: process.argv[2],
59
+ visqolKeepSourceFiles: true,
60
+ })
61
+ })().catch(err => console.error(err))
62
+ }