mirror of
https://github.com/pion/mediadevices.git
synced 2025-09-26 12:31:15 +08:00

Changes: * Add argument to tolerate some FPS variations. * Update wrapper function. * Update tests. * Add test about frame rate change tolerance. * Verify the onChange function is not called when the frame rate change is within the the specified tolerance. * Update test about frame rate variation detection * Create dedicated throttle transform function to slow down after a specific amount of time. * Remove unnecessary code.
36 lines
1.3 KiB
Go
36 lines
1.3 KiB
Go
package mediadevices
|
|
|
|
import (
|
|
"github.com/pion/mediadevices/pkg/io/audio"
|
|
"github.com/pion/mediadevices/pkg/io/video"
|
|
"github.com/pion/mediadevices/pkg/prop"
|
|
)
|
|
|
|
// detectCurrentVideoProp is a small helper to get current video property
|
|
func detectCurrentVideoProp(broadcaster *video.Broadcaster) (prop.Media, error) {
|
|
var currentProp prop.Media
|
|
|
|
// Since broadcaster has a ring buffer internally, a new reader will either read the last
|
|
// buffered frame or a new frame from the source. This also implies that no frame will be lost
|
|
// in any case.
|
|
metaReader := broadcaster.NewReader(false)
|
|
metaReader = video.DetectChanges(0, 0, func(p prop.Media) { currentProp = p })(metaReader)
|
|
_, _, err := metaReader.Read()
|
|
|
|
return currentProp, err
|
|
}
|
|
|
|
// detectCurrentAudioProp is a small helper to get current audio property
|
|
func detectCurrentAudioProp(broadcaster *audio.Broadcaster) (prop.Media, error) {
|
|
var currentProp prop.Media
|
|
|
|
// Since broadcaster has a ring buffer internally, a new reader will either read the last
|
|
// buffered frame or a new frame from the source. This also implies that no frame will be lost
|
|
// in any case.
|
|
metaReader := broadcaster.NewReader(false)
|
|
metaReader = audio.DetectChanges(0, func(p prop.Media) { currentProp = p })(metaReader)
|
|
_, _, err := metaReader.Read()
|
|
|
|
return currentProp, err
|
|
}
|