Skip to content

HTTP Connections Not Released After OpenTelemetry Integration #5883

@Lei-k

Description

@Lei-k

What happened?

Problem Description

When using flv.js to play video streams, the player.destroy() method successfully releases HTTP connections before integrating OpenTelemetry. However, after adding OpenTelemetry instrumentation, the HTTP connections remain active and are not properly released when calling player.destroy().

Environment

  • Framework: Vite + Vanilla JavaScript
  • Video Player: flv.js v1.6.2
  • OpenTelemetry Packages:
    • @opentelemetry/sdk-trace-web
    • @opentelemetry/instrumentation-fetch
    • @opentelemetry/context-zone
    • @opentelemetry/instrumentation

Steps to Reproduce

  1. Without OpenTelemetry (Working):

    // Create FLV player
    const flvPlayer = flvjs.createPlayer({
        type: 'flv',
        url: 'http://example.com/stream.flv'
    });
    
    // Attach to video element
    flvPlayer.attachMediaElement(videoElement);
    flvPlayer.load();
    
    // Destroy player - HTTP connections are properly released
    flvPlayer.destroy();
  2. With OpenTelemetry (Not Working):

    // Initialize OpenTelemetry
    import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
    import { FetchInstrumentation } from '@opentelemetry/instrumentation-fetch';
    import { registerInstrumentations } from '@opentelemetry/instrumentation';
    
    const provider = new WebTracerProvider();
    provider.register();
    
    registerInstrumentations({
        instrumentations: [new FetchInstrumentation()],
    });
    
    // Create FLV player (same as above)
    const flvPlayer = flvjs.createPlayer({
        type: 'flv',
        url: 'http://example.com/stream.flv'
    });
    
    flvPlayer.attachMediaElement(videoElement);
    flvPlayer.load();
    
    // Destroy player - HTTP connections remain active
    flvPlayer.destroy();

Expected Behavior

  • HTTP connections should be properly closed and released when calling player.destroy()
  • Network resources should be cleaned up
  • No lingering connections in browser's Network tab

Actual Result

  • HTTP connections remain active after player.destroy()
  • Network requests continue to show as not finished in browser's Network tab
  • Memory usage may increase over time due to unreleased connections

OpenTelemetry Setup Code

import {
        ConsoleSpanExporter,
        SimpleSpanProcessor,
        WebTracerProvider,
        } from '@opentelemetry/sdk-trace-web';
        import { FetchInstrumentation } from '@opentelemetry/instrumentation-fetch';
        import { ZoneContextManager } from '@opentelemetry/context-zone';
        import { registerInstrumentations } from '@opentelemetry/instrumentation';
        import flvjs from 'flv.js';

        const provider = new WebTracerProvider({
        spanProcessors: [new SimpleSpanProcessor(new ConsoleSpanExporter())]
        });

        provider.register({
        contextManager: new ZoneContextManager(),
        });

        registerInstrumentations({
        instrumentations: [new FetchInstrumentation()],
        });

package.json

{
  "name": "flv.js-otl",
  "version": "1.0.0",
  "description": "FLV.js demo project with OpenTelemetry integration",
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "preview": "vite preview"
  },
  "devDependencies": {
    "vite": "^7.1.3"
  },
  "dependencies": {
    "@opentelemetry/context-zone": "^2.0.1",
    "@opentelemetry/instrumentation": "^0.203.0",
    "@opentelemetry/instrumentation-fetch": "^0.203.0",
    "flv.js": "^1.6.2"
  }
}

Relevant log output

content.js:1 Simple Autoscroll Loaded
flv__js.js?v=609e0f72:9113 [MSEController] > MediaSource onSourceOpen
flv__js.js?v=609e0f72:9113 [FLVDemuxer] > Parsed onMetaData
flv__js.js?v=609e0f72:9113 [FLVDemuxer] > Parsed AudioSpecificConfig
flv__js.js?v=609e0f72:9113 [FLVDemuxer] > Parsed AVCDecoderConfigurationRecord
flv__js.js?v=609e0f72:9113 [MSEController] > Received Initialization Segment, mimeType: audio/mp4;codecs=mp4a.40.2
flv__js.js?v=609e0f72:9113 [MSEController] > Received Initialization Segment, mimeType: video/mp4;codecs=avc1.64001e
hook.js:608 [FlvPlayer] > Playback seems stuck at 0, seek to 1.032
overrideMethod @ hook.js:608
__webpack_modules__../src/utils/logger.js.Log2.w @ flv__js.js?v=609e0f72:9082
__webpack_modules__../src/player/flv-player.js.FlvPlayer2._checkAndResumeStuckPlayback @ flv__js.js?v=609e0f72:6855
__webpack_modules__../src/player/flv-player.js.FlvPlayer2._onvProgress @ flv__js.js?v=609e0f72:6912
invokeTask @ @opentelemetry_context-zone.js?v=609e0f72:545
runTask @ @opentelemetry_context-zone.js?v=609e0f72:326
invokeTask @ @opentelemetry_context-zone.js?v=609e0f72:622
invokeTask @ @opentelemetry_context-zone.js?v=609e0f72:1123
globalCallback @ @opentelemetry_context-zone.js?v=609e0f72:1144
globalZoneAwareCallback @ @opentelemetry_context-zone.js?v=609e0f72:1169

Operating System and Version

Ubuntu 24.04

Runtime and Version

Chrome 135

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingpkg:instrumentation-fetchpriority:p1Bugs which cause problems in end-user applications such as crashes, data inconsistencies, etc

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions