{"id":7321,"date":"2025-04-04T21:33:24","date_gmt":"2025-04-04T13:33:24","guid":{"rendered":"https:\/\/doc.smartflomeet.ttns.in\/developer\/?page_id=7321"},"modified":"2025-04-05T02:52:27","modified_gmt":"2025-04-04T18:52:27","slug":"annotation","status":"publish","type":"page","link":"https:\/\/doc.smartflomeet.ttns.in\/developer\/video-api\/client-api\/flutter-toolkit\/annotation\/","title":{"rendered":"Annotation: Flutter SDK \u2013 Video API"},"content":{"rendered":"\n<blockquote class=\"wp-block-quote\"><p>The Annotation feature allows you to annotate on a Remote Stream. To support Annotations, you need to enable Canvas Streaming during <a href=\"\/developer\/video-api\/server-api\/rooms-route\/#create-room\" target=\"_blank\" rel=\"noreferrer noopener\">Room Creation<\/a> by setting: { canvas: true; }} in the JSON payload. To implement Annotation, you need to add Annotation Toolbar before you can start Annotations.<\/p><\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"block-9376d8b6-a130-4bac-b50c-0240937b20f3\">Table of Contents<\/h4>\n\n\n\n<ul id=\"block-ca0b60bd-df50-4ebe-b4f5-e7bb3a104631\"><li><a href=\"https:\/\/enablex22.vcloudx.com\/developer\/wp-admin\/post.php?post=4232&amp;action=edit#annotation-toolbar\">Add Annotation Toolbar<\/a><\/li><li><a href=\"https:\/\/enablex22.vcloudx.com\/developer\/wp-admin\/post.php?post=4232&amp;action=edit#annotation-start-stop\">Start \/ Stop Annotation<\/a><\/li><\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"block-f28719b2-f301-47dd-b80e-050adfc85b32\">Add Annotation Toolbar<\/h3>\n\n\n\n<p id=\"block-0827b959-09e3-4611-9868-b6d519d32778\">Initiate Annotation Toolbar using the following code:<\/p>\n\n\n\n<pre id=\"block-de5b1a06-471d-44ff-9302-7df87ae7e9fe\" class=\"wp-block-preformatted\">EnxToolbarWidget(width:100, height:50); <\/pre>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"block-87f251cf-bfe1-4208-85cf-c1da16b39ce9\">Start Annotation<\/h3>\n\n\n\n<p id=\"block-811a4141-6c5c-4604-9b5e-77aaabced35e\">The <code>EnxRoom.startAnnotation()<\/code> method is used to start Annotation on a given Stream object. To initiate Annotation, you need to&nbsp;<code>setAnnotationObserver<\/code>&nbsp;after getting connected to the room.<\/p>\n\n\n\n<p> <strong>Class:<\/strong> EnxRtc <\/p>\n\n\n\n<p id=\"block-eec69be1-397d-44c9-912b-c74b9c930e34\"><strong>Method<\/strong>: <code>static Future&lt;void&gt; startAnnotation(String streamId)<\/code><\/p>\n\n\n\n<p id=\"block-2214399a-6e09-4b42-a9df-2d687fdf5826\"><strong>Parameter:<\/strong>&nbsp;<\/p>\n\n\n\n<ul><li><code>streamId<\/code>: Stream Id of the stream to be annotated.<\/li><\/ul>\n\n\n\n<p id=\"block-62cb1e2f-b8c2-4b5c-90b5-5f6122b981be\"><strong>Callbacks<\/strong>:<\/p>\n\n\n\n<ul id=\"block-6f78d96d-7c34-44c8-bfb5-fb31ea9e4321\"><li><code>onStartAnnotationAck<\/code> &nbsp;\u2013 Acknowledgment to the Annotator when Annotation starts.<\/li><li><code>onAnnotationStarted<\/code>&nbsp;\u2013 Notification to everyone in the Room when Annotation starts.<\/li><\/ul>\n\n\n\n<pre id=\"block-eee64963-8812-47e5-afe0-1c2a43d49556\" class=\"wp-block-preformatted\">EnxRtc.startAnnotation(streamId);\t\/\/ Start Annotation \n\n\/\/ Acknowlegement to Annotator - Annotation started \nEnxRtc.onStartAnnotationAck=(Map&lt;dynamic, dynamic&gt; map) { \n\n}; \n\n\/\/ Notification to all - Annotation started \nEnxRtc.onAnnotationStarted=(Map&lt;dynamic, dynamic&gt; map) { \n\n};<\/pre>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"block-4b9a4e90-d167-4e62-ab63-ece50df3d61c\">Stop Annotation<\/h3>\n\n\n\n<p id=\"block-1be49a64-048c-4d99-9b41-faacc9b91c0e\">The <code>EnxRoom.stopAnnotation()<\/code> method is used to stop Annotations.<\/p>\n\n\n\n<p id=\"block-997c759d-e0f0-4c28-9196-95c800fa35b7\"><strong>Class:<\/strong> EnxRtc<\/p>\n\n\n\n<p id=\"block-7d9bef8b-072b-481f-be78-5e6619bbce5c\"><strong>Method:<\/strong> <code>static Future&lt;void&gt; stopAnnotations()<\/code><\/p>\n\n\n\n<p id=\"block-9efbf6f2-619f-427f-89ec-885e5e1a7844\"><strong>Callbacks:<\/strong><\/p>\n\n\n\n<ul id=\"block-5844cf4a-b9ae-4434-b6b0-d3eaec357946\"><li><code>onStoppedAnnotationAck<\/code> &nbsp;\u2013 Acknowledgment to the Annotator when Annotation stops.<\/li><li><code>onAnnotationStopped<\/code>&nbsp;\u2013 Notification to everyone in the Room when Annotation stops.<\/li><\/ul>\n\n\n\n<pre id=\"block-1931e0ce-a98f-4a57-b1ea-757b2abb9d04\" class=\"wp-block-preformatted\">EnxRtc.stopAnnotation(); \/\/ Stop Annotation \n\n\/\/ Notification to all - Annotation stopped\nEnxRtc.onAnnotationStopped=(Map&lt;dynamic, dynamic&gt; map) { \n\n}; \n\n\/\/ Acknowlegement to Annotator - Annotation stopped \nEnxRtc.onStoppedAnnotationAck=(Map&lt;dynamic, dynamic&gt; map) { \n\n}; <\/pre>\n\n\n\n<p id=\"block-e064261b-fb3b-46db-97c5-c803ee591050\"><strong>Error Codes \/ Exceptions:<\/strong>&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Code<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td>5093<\/td><td>Annotation Access denied.<\/td><\/tr><tr><td>5104<\/td><td>Repeated <code>startAnnotation()<\/code> call made while Annotations already active in the Room.<\/td><\/tr><tr><td>5106<\/td><td>Repeated <code>startAnnotation()<\/code> call made while a previous request is in process.<\/td><\/tr><tr><td>5108<\/td><td>Invalid Stream passed to <code>startAnnotation()<\/code>.<\/td><\/tr><tr><td>5109<\/td><td>Failed to publish Annotation Stream.<\/td><\/tr><tr><td>5112<\/td><td>Annotation support available in Landscape Mode only.<\/td><\/tr><tr><td>5094<\/td><td>Repeated <code>stopAnnotation()<\/code> call made while a previous request is in process.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div class=\"wp-block-columns\">\n<div class=\"wp-block-column\">\n<p> \u2190  <a href=\"..\/custom-signalling\/\">Custom Signalling<\/a> <\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column\">\n<p class=\"has-text-align-center\"> <a href=\"..\/\">Index<\/a> <\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column\">\n<p class=\"has-text-align-right\"> <a href=\"..\/recording\/\">Record Session<\/a>  <\/p>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>The Annotation feature allows you to annotate on a Remote Stream. To support Annotations, you need to enable Canvas Streaming during Room Creation by setting: { canvas: true; }} in the JSON payload. To implement Annotation, you need to add Annotation Toolbar before you can start Annotations. Table of Contents Add Annotation Toolbar Start \/ Stop Annotation Add Annotation Toolbar Initiate Annotation Toolbar using the following code: EnxToolbarWidget(width:100, height:50); Start&hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"parent":3755,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"ub_ctt_via":""},"featured_image_src":null,"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false,"featured":false,"featured-large":false},"uagb_author_info":{"display_name":"vcxdevwpadmin","author_link":"https:\/\/doc.smartflomeet.ttns.in\/developer\/author\/vcxdevwpadmin\/"},"uagb_comment_info":0,"uagb_excerpt":"The Annotation feature allows you to annotate on a Remote Stream. To support Annotations, you need to enable Canvas Streaming during Room Creation by setting: { canvas: true; }} in the JSON payload. To implement Annotation, you need to add Annotation Toolbar before you can start Annotations. Table of Contents Add Annotation Toolbar Start \/&hellip;","_links":{"self":[{"href":"https:\/\/doc.smartflomeet.ttns.in\/developer\/wp-json\/wp\/v2\/pages\/7321"}],"collection":[{"href":"https:\/\/doc.smartflomeet.ttns.in\/developer\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/doc.smartflomeet.ttns.in\/developer\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/doc.smartflomeet.ttns.in\/developer\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/doc.smartflomeet.ttns.in\/developer\/wp-json\/wp\/v2\/comments?post=7321"}],"version-history":[{"count":0,"href":"https:\/\/doc.smartflomeet.ttns.in\/developer\/wp-json\/wp\/v2\/pages\/7321\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/doc.smartflomeet.ttns.in\/developer\/wp-json\/wp\/v2\/pages\/3755"}],"wp:attachment":[{"href":"https:\/\/doc.smartflomeet.ttns.in\/developer\/wp-json\/wp\/v2\/media?parent=7321"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}