Перейти в хранилище документации
Обратиться в техническую поддержку
Для получения треков с помощью GO необходимо:
Выполнить пример кода:
client := metadata.NewMetadataServiceClient(conn) stream, err := client.PullMetadata(context.Background()) ch := make(chan int, 8) go func() { for { in, err := stream.Recv() if err == io.EOF { close(ch) return } if err != nil { log.Fatal(err) } switch data := in.Data.(type) { case *metadata.PullMetadataResponse_Heartbeat: // case *metadata.PullMetadataResponse_ConfigUpdate: // case *metadata.PullMetadataResponse_Sample: switch sampleData := data.Sample.Data.(type) { case *metadata.MetadataSample_Tracklets: log.Printf("Time: %v\nTracklets: %v", data.Sample.Timestamp, sampleData.Tracklets) } } ch <- 1 // notify the main thread about receiving the sample } }() endpoint := media.EndpointRef{AccessPoint: "hosts/SERVER/AVDetector.1/SourceEndpoint.vmda"} req := metadata.PullMetadataRequest{ Count: 8, // ask for several samples, so that they are not lost while server waits for another response from client Endpoint: &endpoint, ProposedChannelIdleMs: 15000, } if err := stream.Send(&req); err != nil { log.Fatal(err) } for { // whenever a sample is received ask for another sample keeping the total samples requested to a fixed value > 1 <-ch req := metadata.PullMetadataRequest{ Count: 1, } if err := stream.Send(&req); err != nil { log.Fatal(err) } }
В результате будут получены возможные варианты ответов.
Примеры ответов:
{ "sample": { "timestamp": "20230914T133656.981000", "tracklets": { "tracklets": [ { "id": 70, "state": "OBJECT_STATE_NORMAL", "rectangle": { "x": 0.10248079895973206, "y": 0.3568287789821625, "w": 0.17517775297164917, "h": 0.257714182138443 }, "logicalCenter": { "x": 0.19006967544555664, "y": 0.6145429611206055 }, "color": { "hue": 222.47191011235952, "saturation": 0.3093524946210368, "value": 0.49719319611902735 } } ] } } }
где
{ "heartbeat": {} }
{ "configUpdate": { "maxChannelIdleMs": 15000 } }