Troubleshooting Common Issues with the ActionScript 3.0 Dynamic Streaming Class
1. Stream won’t start or connect
- Check netConnection URL: Ensure the NetConnection URL exactly matches the media server or CDN endpoint (including rtmp/rtmpe/rtmfp or http(s) for progressive/HDS/HLS).
- Firewall/ports: Verify required ports (RTMP default 1935) are open on client/network and server accepts connections.
- Security sandbox: For Flash Player, confirm crossdomain.xml on the server allows the client domain.
- Event listeners: Listen for NetConnection events (NetStatusEvent.NET_STATUS, SecurityErrorEvent, IOErrorEvent) and log codes/messages.
2. Playback stalls or buffers too often
- Bitrate switching settings: Verify Dynamic Streaming class bitrate thresholds and buffer time are reasonable for target networks.
- Initial buffer length: Increase initial bufferTime to reduce startup stalls; lower bufferTime for low-latency use cases.
- Bandwidth estimation: Confirm the bandwidth measurement routine is enabled and working; false low estimates cause unnecessary downshifts.
- Server-side limits: Ensure the server can deliver required throughput; check server CPU/network saturation.
3. Incorrect bitrate selection or frequent oscillation
- Quality switch hysteresis: Implement or tune hysteresis to avoid rapid up/down switching (e.g., require sustained better bandwidth before upswitch).
- Accurate metrics: Use smoothed bandwidth averages and consider segment download times rather than single-sample reads.
- Manifest/stream metadata: Confirm the stream/manifest advertises correct bitrate values and segment durations.
4. Audio/video out of sync after switches
- Keyframe alignment: Ensure encoded segments have frequent keyframes and aligned GOP structures across bitrates to enable clean switches.
- Switch timing: Only switch at segment/keyframe boundaries. Verify the Dynamic Streaming class honors keyframe timestamps.
- Buffer handling: Flush or realign playback buffer on switch if timestamp discontinuities occur.
5. Seek or scrub issues
- Seekable ranges: Confirm server supports seeking and provides accurate metadata (duration/keyframe index).
- Progressive vs segmented: Differentiate progressive HTTP vs fragmented streaming—seeking behavior differs; use appropriate APIs.
- Index availability: For accurate seeks, ensure keyframe/index files are present and referenced.
6. Security/authorization failures
- Tokenized URLs: If using signed URLs or tokens, ensure tokens are valid, have correct TTL, and are included in both manifest and chunk requests.
- CORS/crossdomain: For HTTP-based streaming, check CORS headers; for Flash, verify crossdomain.xml permissions.
- ACLs/geo-blocking: Confirm server-side ACLs aren’t blocking clients.
7. Errors and exceptions to monitor
- NetStream.Play.StreamNotFound: Wrong stream name or missing file.
- NetStream.Play.Start / NetStream.Play.Stop: Use as cues for playback lifecycle.
- IOErrorEvent / SecurityErrorEvent: Network/file access or security policy issues.
- Custom error codes: Log and map any vendor/server-specific error codes.
8. Diagnostic steps and tools
- Verbose logging: Enable detailed NetConnection/NetStream logs and measure segment download times, buffer levels, and bitrate switches.
- Packet capture: Use Wireshark to inspect RTMP/HTTP requests and bandwidth utilization.
- Encoding checks: Validate encoded profiles, GOP size, bitrates, and keyframe intervals with ffprobe or MediaInfo.
- Server logs: Inspect media server/CDN logs for rejected requests, throttling, or errors.
9. Quick checklist to resolve common problems
- Verify URLs and stream names.
- Confirm server availability and ports.
- Check crossdomain/CORS and security tokens.
- Enable and inspect NetStatus and error events.
- Tune bufferTime and switching hysteresis.
- Ensure aligned keyframes across renditions.
- Monitor server capacity and CDN behavior.
If you want, I can convert this into a troubleshooting flowchart, add example ActionScript code for logging NetStream/NetConnection events, or review specific NetStatus codes you’re seeing.