{"id":4743,"date":"2021-12-06T20:08:13","date_gmt":"2021-12-06T12:08:13","guid":{"rendered":"https:\/\/www.enablex.io\/developer\/?page_id=4743"},"modified":"2025-04-05T02:57:58","modified_gmt":"2025-04-04T18:57:58","slug":"recording","status":"publish","type":"page","link":"https:\/\/doc.smartflomeet.ttns.in\/developer\/video-api\/client-api\/flutter-toolkit\/recording\/","title":{"rendered":"Recording: Flutter SDK &#8211; Video API"},"content":{"rendered":"\n<blockquote class=\"wp-block-quote\"><p>Using Portal you may get a RTC session recorded as individual streams and later be transcoded through a post-session service to create a single video file which can be retrieved and re-played using any Video Player. Recording can be started in 2 ways, viz.<\/p><\/blockquote>\n\n\n\n<h4>Table of Contents<\/h4>\n\n\n\n<ul><li><a href=\"#ways-to-record\">Ways to Record<\/a><ul><li><a href=\"#auto-recording\">Auto Recording<\/a><\/li><li><a href=\"#on-demand-recording\">On-Demand Recording<\/a><\/li><\/ul><\/li><li><a href=\"#get-rec-files\">Get Recording Files<\/a><ul><li><a href=\"#rec-file-type\">Type of Files<\/a><\/li><li><a href=\"#use-api\">Use API to get Files<\/a><\/li><li><a href=\"#file-delivery\">Get Files delivered<\/a><\/li><li><a href=\"#webhook\">Get notified on Webhook<\/a><\/li><\/ul><\/li><li><a href=\"#live-recording\">New Way to Record Live with an UI<\/a><ul><li><a href=\"#auto-live-recording\">Auto Live Recording<\/a><\/li><li><a href=\"#on-demand-live-recording\">On-Demand Live Recording<\/a><\/li><li><a href=\"#error-codes\">Error Codes<\/a><\/li><\/ul><\/li><li><a href=\"#play\">Play a Recorded File<\/a><\/li><\/ul>\n\n\n\n<a name=\"ways-to-record\"><\/a>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2>Ways to Record<\/h2>\n\n\n\n<a name=\"auto-recording\"><\/a>\n\n\n\n<h3>Auto-Recording<\/h3>\n\n\n\n<p>You may define a room to start  recording automatically as and when a  session starts in the room. You  may pass <code>{ settings: { auto_recording:  true }}<\/code> in the JSON Payload while  creating a room to ensure a session  is recorded automatically.  <\/p>\n\n\n\n<a name=\"on-demand-recording\"><\/a>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3>On-Demand Recording<\/h3>\n\n\n\n<p>Client API call helps you start and stop recording as and when needed. The available methods are accessible to Moderator only. Therefore, on the Moderator End-Point, you may require to create UI to use the methods to start or stop recording a session. <\/p>\n\n\n\n<p>To start session recording on demand you may use  <code>startRecord() <\/code>method, and to stop may use <code>stopRecord()<\/code> method. On successful initiation of recording and stopping of recording the moderator will be notified using  <code>onStartRecordingEvent<\/code>  and  <code>onStopRecordingEvent<\/code>  event listeners; also, all other participant swill be notified using   <code>onRoomRecordingOn<\/code> and  <code>onRoomRecordingOff<\/code> event listener respectively.  <\/p>\n\n\n\n<p><strong>Methods:<\/strong><\/p>\n\n\n\n<ul><li><code>static Future&lt;void&gt; startRecord()<\/code> &#8211; No parameter needed. To start recording<\/li><li><code>static Future&lt;void&gt; stopRecord()<\/code> &#8211; No parameter needed. To stop recording <\/li><\/ul>\n\n\n\n<p><strong>Event Listeners:<\/strong><\/p>\n\n\n\n<ul><li> <code>onStartRecordingEvent<\/code> &#8211; To moderator to notify that recording has started<\/li><li> <code>onStopRecordingEvent<\/code> &#8211; To moderaor to notify that recording has stopped<\/li><li> <code>onRoomRecordingOn<\/code>  &#8211; To all participant to notify recording is on<\/li><li> <code>onRoomRecordingOff<\/code>  &#8211; To all participant to notify recording is off  <\/li><\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">EnxRtc.startRecord(); \/\/ To start recording\nEnxRtc.stopRecord(); \/\/ To stop recording\n\nEnxRtc.onRoomRecordingOn= (Map&lt;dynamic, dynamic&gt; map) {\n\t\/\/ To all participant to notify recording is on\n\t\/\/ map is {\"msg\":\"Room Recording On\",\"result\":\"0\u201d}\n};\n\nEnxRtc.onRoomRecordingOff= (Map&lt;dynamic, dynamic&gt; map) {\n\t\/\/ To all participant to notify recording is off\n\t\/\/ map is {\"msg\":\"Room Recording Off\",\"result\":\"0\u201d}\n};\n\nEnxRtc.onStartRecordingEvent= (Map&lt;dynamic, dynamic&gt; map) {\n\t\/\/ To moderator to notify that recording has started\n\t\/\/ map is {\"result\":0\u201d,\"msg\":\"Success\"}\n};\n\nEnxRtc.onStopRecordingEvent= (Map&lt;dynamic, dynamic&gt; map) {\n\t\/\/ To moderator to notify that recording has stopped\n\t\/\/ map is {\"result\":0\u201d,\"msg\":\"Success\"}\n};\n\nEnxRtc. onRoomRecordingOff= (Map&lt;dynamic, dynamic&gt; map) {\n  \/\/ To all participant to notify recording is \n   \/\/where map is\n  \/\/{\"msg\":\"Room Recording Off\",\"result\":\"0\u201d}\n\n};<\/pre>\n\n\n\n<p><strong>Note:<\/strong><\/p>\n\n\n\n<ul><li>Moderator can start\/stop recording any number of time during a session as he wishes.  <\/li><li>Moderator can stop recording in a room defined with auto-recording feature.    <\/li><\/ul>\n\n\n\n<a name=\"get-rec-files\"><\/a>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2>Get Recording Files<\/h2>\n\n\n\n<a name=\"rec-file-type\"><\/a>\n\n\n\n<h3>Type of Recording Files<\/h3>\n\n\n\n<p>The following type of files you get in the recording process:<\/p>\n\n\n\n<ol><li><strong>Individual Participants Stream Recordings:<\/strong>&nbsp;Each users stream gets recorded individually and are made available for download. These files are in .MKV format.<\/li><li><strong>Transcoded Re-playable Session:<\/strong>&nbsp; It\u2019s a single composite video file created out of all the individual participant\u2019s streams in the right playtime. These files are created in .MP4 format. Transcoding is a subscription based service. The Transcoded files are made available for download. If moderator has recorded different segment of Video Session, you get multiple .MP4 files, one for each recorded segments.  Transcoding is done in a predefined layout. <\/li><\/ol>\n\n\n\n<p><strong>Note:<\/strong> Individual Stream Recordings are available for download within minutes post session. However, transcoding process to create single playable file takes longer to finish. Therefore, transcoding files may be available for download within 10-45 minutes post session depending on transcoding queue. <\/p>\n\n\n\n<a name=\"use-api\"><\/a>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3>Use Video API to get Files<\/h3>\n\n\n\n<p>Using Video API you can fetch Archive Reports through a HTTP GET request to its&nbsp;<code>archive<\/code>&nbsp;route. You may use the following filters to get the right set of Archive Report as designed:<\/p>\n\n\n\n<ul><li>For a Period \u2013 For a given From and To date<\/li><li>For a Room ID<\/li><li>For a Room ID within a Period<\/li><li>For a specific Session \u2013 For a given Conference Number<\/li><\/ul>\n\n\n\n<p>After getting the Archive Report, you may need to do HTTP GET to each of the URLs given in the Report to download files individually.<\/p>\n\n\n\n<p>Please&nbsp; refer to online documentation <a href=\"\/developer\/video-api\/server-api\/archive-route\/\">for detailed explanation of API calls.<\/a><\/p>\n\n\n\n<a name=\"file-delivery\"><\/a>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3>Get Files delivered<\/h3>\n\n\n\n<p>Portal delivers your files your location \/ server \/ storage using its Archive Delivery Service. You need to configure your Delivery Loation using Portal.<\/p>\n\n\n\n<p><em>Portal Login &gt; Video &gt; &nbsp;Settings &gt; Archive<\/em><\/p>\n\n\n\n<p>Using this Tool, define your Delivery Server with Access Credentials. Portal supports delivery to the following location:<\/p>\n\n\n\n<ul><li>FTP \/ SFTP to your Server<\/li><li>SCP to your Server<\/li><li>Amazon S3<\/li><li>Azure Blob Storage<\/li><li>Google Drive<\/li><\/ul>\n\n\n\n<p>Once configured, Portal transfers your files and keep them organized in sub-folders in the folder you designated for delivery. <\/p>\n\n\n\n<p>File delivery is a batch process. You may face significant delay in delivery. After a file is delivered to your location, Portal notifies you through a Webhook Notification to help you automate workflow.<\/p>\n\n\n\n<a name=\"webhook\"><\/a>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3>Get notified through Webhook<\/h3>\n\n\n\n<p>Portal may notify you as soon as any file is available for downloading or as soon as a file gets delivered to your location by HTTP POST to a designated Webhook URL. You need to setup the URL at your Project Server. To configure your Webhook URL, follow the path:<\/p>\n\n\n\n<p><em><em>Portal Login &gt; Video &gt; &nbsp;Settings &gt; Preferences &gt; Webhook<\/em><\/em><\/p>\n\n\n\n<p>Once configured, portal does HTTP POST with JSON Raw Body to the URL for you to process. Note that you need to do HTTP GET to each of the URLs given in the JSON to download files individually. JSON Format given below:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/ When a Recording files are ready \n{\t\n\t\u201c<strong>type<\/strong>\u201d: \u201crecording\u201d,\n\t\u201ctrans_date\u201d: \u201cDatetime\u201d,  \/* In UTC *\/\n\t\u201capp_id\u201d: \u201cString\u201d,\n\t\u201croom_id\u201d: \u201cString\u201d,\n\t\u201cconf_num\u201d: \u201cString\u201d,\n\t\u201crecording\u201d: [ \n\t\t{ \"url\": \"http:\/\/FQDN\/path\/file\" }\n\t]\n}\n\n\/\/ When Transcoded Video files is ready\n{\t\n\t\u201c<strong>type<\/strong>\u201d: \u201ctranscoded\u201d,\n\t\u201ctrans_date\u201d: \u201cDatetime\u201d,  \/* In UTC *\/\n\t\u201capp_id\u201d: \u201cString\u201d,\n\t\u201croom_id\u201d: \u201cString\u201d,\n\t\u201cconf_num\u201d: \u201cString\u201d,\n\t\u201ctranscoded\u201d: [ \n\t\t{ \"url\": \"http:\/\/FQDN\/path\/file\" }\n\t]\n}\n\n\/\/ When Chat Scripts are ready \n{\n\t\u201c<strong>type<\/strong>\u201d: \u201cchatdata\u201d,\n\t\u201ctrans_date\u201d: \u201cDatetime\u201d,  \/* In UTC *\/\n\t\u201capp_id\u201d: \u201cString\u201d,\n\t\u201croom_id\u201d: \u201cString\u201d,\n\t\u201cconf_num\u201d: \u201cString\u201d,\n\t\u201cchatdata\u201d: [ \n\t\t{ \"url\": \"http:\/\/FQDN\/path\/file\" }\n\t]\n}<\/pre>\n\n\n\n<p>Please&nbsp;<a href=\"\/developer\/solutions\/video-service-notification-webhook\/\">refer to online documentation<\/a> for detailed explanation of Webhook Notification.<\/p>\n\n\n\n<a name=\"live-recording\"><\/a>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2>New Way to Record Live with an UI<\/h2>\n\n\n\n<p><strong>Availabiity:<\/strong> v2.1.5+<\/p>\n\n\n\n<p>Recording Live refers to a new process of creating a transcoded file in a live session with a custom layout without having to record individual streams. So, using Live Recording has double advantage:<\/p>\n\n\n\n<ul><li>You get a transcoded file within minutes post session. Not to wait longer alike previous transcoding process.<\/li><li>You have an option to define your own layout for the live recording process unlike previous transcoding process that creates in a predefined layout.<\/li><\/ul>\n\n\n\n<a name=\"auto-live-recording\"><\/a>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3>Auto Live Recording<\/h3>\n\n\n\n<p>You can configure a Room with to start Live Recording automatically as soon as the first person joing the Room. This may be done while creating a Room with the following settings:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\"settings\": { \n\t\"live_recording\": {\n\t\t\"auto_recording: true, \n\t\t\"url\": \"https:\/\/your-custom-view-url\"\n\t}\n}<\/pre>\n\n\n\n<ul><li>Know more about <a href=\"\/developer\/video-api\/server-api\/rooms-route\/#create-room\">Room Creation Payload<\/a> using our Video API. <\/li><li>Know how to <a href=\"\/developer\/video\/solutions\/rtmp-live-streaming\/#create-stream-view\">create Custom View for Live Recording<\/a>. Its the same way as we create View for Live Streaming. <\/li><li>URL is optional. If you skip it, portal uses a default layout.<\/li><\/ul>\n\n\n\n<p>Moderator can still stop live recording in a Room  by using  the&nbsp;<a rel=\"noreferrer noopener\" href=\"#on-demand-recording\" target=\"_blank\"><code>stopRecord()<\/code><\/a>&nbsp;method given below.<\/p>\n\n\n\n<a name=\"on-demand-live-recording\"><\/a>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3>On-Demand Live Recording<\/h3>\n\n\n\n<p>Using SDK methods, a Moderator can start \/ stop live recording any time as he demands. The&nbsp;<code>EnxRoom.startLiveRecording()&nbsp;<\/code>method allows the Moderator to start live recording the session  and <code>EnxRoom.stopLiveRecording()<\/code> stops it. <\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4>Start Live Recording<\/h4>\n\n\n\n<p><strong>Class:<\/strong>&nbsp;<code>EnxRtc<\/code><\/p>\n\n\n\n<p><strong>Method<\/strong>:&nbsp;<code>static Future startLiveRecording(Map &lt;String, Dynamic&gt; config) \u2013 to start live recording<\/code> &#8211; to start live recording.<\/p>\n\n\n\n<p><strong>Parameters:<\/strong><\/p>\n\n\n\n<ul><li><code>config<\/code>&#8211; Recording configuration.  Its a JSON object with following keys:<ul><li>urlDetails &#8211; Its a JSON Object to define Custom View and its options. It may be empty to work on default values.<ul><li><code>url <\/code>&#8211; To specify the URL of custom view.  (Know how to <a href=\"\/developer\/video\/solutions\/rtmp-live-streaming\/#create-stream-view\">create Custom View for Live Recording<\/a>. Its the same way as we create View for Live Streaming). If its empty, default layout will be used.<\/li><li><code>any_custom_key_object<\/code> &#8211; You may use any custom key or object that the your Custom View handles to change view\/layout etc through query string. <\/li><\/ul><\/li><\/ul><\/li><\/ul>\n\n\n\n<p><strong>Event Notifications:<\/strong><\/p>\n\n\n\n<ul><li><code><code>onACKStartLiveRecording<\/code><\/code> &#8211; Acknowledgement to notify that the start recording command has been accepted.<\/li><li><code>onLiveRecordingNotification <\/code>&#8211; Notification to all users when Live Recording gets started. A new user joining the session gets the same notification if the session is being recorded live.<\/li><\/ul>\n\n\n\n<p><strong><strong>Response Body<\/strong>:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">{\n\tdata = {\n\t\tstatus =  {\n\t\t\tresultCode = 0,\n                        success = true,\n                        error = {\n\t\t\t\terrorCode = 0;\n                                errorDesc = \"\";\n\t\t\t} \n\t\t},\n\t\tstartedBy = \"7f0f2b04-1ad4-4231-8fdc-9f9e014053b4\",\n\t},\n        type = \"room-live-recording-on\";\n}<\/pre>\n\n\n\n<p><strong>Code Example:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Map&lt;String, dynamic&gt; config = {\n\t\"urlDetails\": {}\n};\n\n\/\/Method calling\nawait EnxRtc.startLiveRecording(config);\n\n\/\/ Acknowledgement\nEnxRtc.onACKStartLiveRecording=(Map&lt;dynamic, dynamic&gt; map){\n      print('onACKStartLiveRecording' + jsonEncode(map));\n}\n\n\/\/ Notification to all \nEnxRtc.onLiveRecordingNotification=(Map&lt;dynamic, dynamic&gt; map){\n      print('onLiveRecordingNotification' + jsonEncode(map));\n}\n<\/pre>\n\n\n\n<p><strong>Error Codes \/ Exceptions<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Code<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td>7000<\/td><td>Generic Server Error<\/td><\/tr><tr><td>7011<\/td><td>Start Live Recording timeout, Internal Server Error<\/td><\/tr><tr><td>7012<\/td><td>Live Recording Request is in Process<\/td><\/tr><tr><td>7013<\/td><td>Start Live Recording Request timeout, Internal Server Error<\/td><\/tr><tr><td>7014<\/td><td>Recording will be made available post-session with a delay<\/td><\/tr><tr><td>7015<\/td><td>Live Recording can&#8217;t be started now, please try after 2 minutes<\/td><\/tr><tr><td>7016<\/td><td>Start Recording Input Parameters missing, Internal Server Error<\/td><\/tr><tr><td>7017<\/td><td>Start Live Recording Input Parameters missing, Internal Server Error<\/td><\/tr><tr><td>7018<\/td><td>Can&#8217;t start Live Recording, Internal Server Error<\/td><\/tr><tr><td>7019<\/td><td>Live Recording already running<\/td><\/tr><tr><td>7020<\/td><td>Start Streaming Failed, Internal Server Error<\/td><\/tr><tr><td>7201<\/td><td>Only moderator can start Live Recording<\/td><\/tr><tr><td>7202<\/td><td>Invalid URL format<\/td><\/tr><tr><td>7203<\/td><td>Room is disconnecting, cannot start live recording<\/td><\/tr><tr><td>7204<\/td><td>Live Recording error<\/td><\/tr><tr><td>7205<\/td><td>Can&#8217;t start Live Recording, Fall-back tried but legacy recording already started<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h4>Stop Live Recording<\/h4>\n\n\n\n<p><strong>Method<\/strong>:&nbsp;<code>EnxRtc.stopLiveRecording()<\/code> &#8211; To stop live recording<\/p>\n\n\n\n<p><strong>Event Notifications:<\/strong><\/p>\n\n\n\n<ul><li><code>onACKStopLiveRecording<\/code> &#8211; Acknowledgement that stop recording request is received. <\/li><\/ul>\n\n\n\n<p><strong><strong>Response Body<\/strong>:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">{\n\tdata = {\n\t\tstatus: {\n                        resultCode: 0,\n                        success: true,\n                        error: { errorCode: 0, errorDesc: '' }\n\t\t},                                         \n                stoppedBy = \"7f0f2b04-1ad4-4231-8fdc-9f9e014053b4\",\n\t},\n        type = \"room-live-recording-off\";\n}<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/Method calling\nawait EnxRtc.stopLiveRecording(config);\n\n\/\/ Acknowledgement\nEnxRtc.onACKStopLiveRecording=(Map&lt;dynamic, dynamic&gt; map){\n      print('onACKStopLiveRecording' + jsonEncode(map));\n}<\/pre>\n\n\n\n<p><strong>Error Codes \/ Exceptions<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Code<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td>7000<\/td><td>Generic Server Error<\/td><\/tr><tr><td>7031<\/td><td>Stop Live Recording timeout, Internal Server Error<\/td><\/tr><tr><td>7032<\/td><td>Stop Live Recording timeout, Internal Server Error<\/td><\/tr><tr><td>7033<\/td><td>Stop Live Recording timeout, Internal Server Error<\/td><\/tr><tr><td>7034<\/td><td>Used internally<\/td><\/tr><tr><td>7035<\/td><td>Failed to stop fall-back legacy recording<\/td><\/tr><tr><td>7036<\/td><td>Only moderator can stop Live Recording<\/td><\/tr><tr><td>7037<\/td><td>Room is disconnecting, Live Recording will be stopped<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<a name=\"error-codes\"><\/a>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4>Error Codes<\/h4>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong> Call State Change Event <\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th> Code <\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td>7000<\/td><td>Generic Server Error<\/td><\/tr><tr><td>7021<\/td><td>Streaming\/Recording Not requested, Invalid State<\/td><\/tr><tr><td>7022<\/td><td>Start Streaming Failed, Internal Server Error<\/td><\/tr><tr><td>7023<\/td><td>Call State Changed, could not find RTMP URL<\/td><\/tr><tr><td>7024<\/td><td>Start Live Recording Failed, Internal Server Error<\/td><\/tr><tr><td>7025<\/td><td>Call State Changed, could not get <code>recording_name<\/code> or <code>recording_path<\/code><\/td><\/tr><tr><td>7026<\/td><td>Call State Changed, got state as disconnected<\/td><\/tr><tr><td>7027<\/td><td>Call State Changed, wrong state in request<\/td><\/tr><tr><td>7028<\/td><td>Call State Changed, could not find allocated broker<\/td><\/tr><tr><td>7029<\/td><td>Call State Changed Input Parameter <code>confNum <\/code>missing<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p> <strong>Start Streaming <\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Code<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td>7000<\/td><td>Generic Server Error<\/td><\/tr><tr><td>7001<\/td><td>Start Streaming timeout, Internal Server Error<\/td><\/tr><tr><td>7002<\/td><td>Start Streaming Request is in process<\/td><\/tr><tr><td>7003<\/td><td>Start streaming Request timeout, Internal Server Error<\/td><\/tr><tr><td>7004<\/td><td>Streaming Can&#8217;t be started now, Please try after 2 minutes<\/td><\/tr><tr><td>7005<\/td><td>Start Streaming Input Parameters missing, Internal Server Error<\/td><\/tr><tr><td>7006<\/td><td>Start Streaming Input Parameters missing, please provide <code>rtmpUrl <\/code>and <code>url<\/code><\/td><\/tr><tr><td>7007<\/td><td>Start Streaming Input Parameters missing, Internal Server Error<\/td><\/tr><tr><td>7008<\/td><td>Only moderator can start streaming<\/td><\/tr><tr><td>7009<\/td><td>Invalid or undefined streaming configuration<\/td><\/tr><tr><td>7101<\/td><td><code>rtmpUrl <\/code>should not exceed more than 3 values<\/td><\/tr><tr><td>7102<\/td><td>Invalid <code>rtmp <\/code>or <code>url <\/code>format<\/td><\/tr><tr><td>7103<\/td><td>Room is disconnecting, cannot start streaming<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p> <strong>Stop Streaming <\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Error<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td>7000<\/td><td>Generic Server Error<\/td><\/tr><tr><td>7041<\/td><td>Stop Streaming timeout, Internal Server Error<\/td><\/tr><tr><td>7042<\/td><td>Stop Streaming Failed, Internal Server Error<\/td><\/tr><tr><td>7043<\/td><td>Stop Streaming Failed, Internal Server Error<\/td><\/tr><tr><td>7044<\/td><td>Only the moderator can stop streaming<\/td><\/tr><tr><td>7045<\/td><td>Room is disconnecting, streaming will be stopped<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p> <strong>Generic Error<\/strong> <\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Error<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td>7000<\/td><td>Stop Streaming\/Recording service Timeout<\/td><\/tr><tr><td>7000<\/td><td>Stop Streaming\/Live Recording service Failed, Internal Server Error<\/td><\/tr><tr><td>7000<\/td><td>Invalid input stop Streaming\/Recording service Failed, Internal Server Error<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p> <strong>Move File CallBack <\/strong> <\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Error<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td>7000<\/td><td>Generic Server Error<\/td><\/tr><tr><td>7051<\/td><td>Recording File Movement failed<\/td><\/tr><tr><td>7052<\/td><td>Recording File Movement failed<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Live Recording <strong>Waiting Queue<\/strong><\/strong><strong> <\/strong> <\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Error<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td>7039<\/td><td>Live recording request was in waiting, successfully removed the request from waiting<\/td><\/tr><tr><td>7046<\/td><td>Streaming request was in waiting, successfully removed the request from waiting<\/td><\/tr><tr><td>7080<\/td><td>Live recording\/streaming request in waiting queue failed to start<\/td><\/tr><tr><td>7081<\/td><td>Live recording\/streaming request in waiting queue failed to start<\/td><\/tr><tr><td>7104 <\/td><td>Streaming request is in waiting, will be started soon <\/td><\/tr><tr><td>7105 <\/td><td>Last streaming request is in waiting <\/td><\/tr><tr><td>7207<\/td><td>Live Recording request is in waiting, will be started soon<\/td><\/tr><tr><td>7208<\/td><td>Last live Recording request is in waiting<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p> <strong>Other Error Codes<\/strong> <\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Error<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td>7061<\/td><td>Internal Server Error Live Recording cannot be started, please try again<\/td><\/tr><tr><td>7071<\/td><td>Only moderator can change live recording params<\/td><\/tr><tr><td>7072<\/td><td>Only moderator can change streaming params<\/td><\/tr><tr><td>7073<\/td><td>User didn&#8217;t provided supported layout, Error in changing liveRecording<\/td><\/tr><tr><td>7074<\/td><td>Live Recording\/streaming not running cannot change params<\/td><\/tr><tr><td>7075<\/td><td>User didn&#8217;t provided layout, Error in changing liveRecording<\/td><\/tr><tr><td>7076<\/td><td>Recording file movement in process, cannot move log files now<\/td><\/tr><tr><td>7077<\/td><td>Log File Movement failed<\/td><\/tr><tr><td>7078<\/td><td>Room is disconnecting, cannot change streaming params<\/td><\/tr><tr><td>7079<\/td><td>Room is disconnecting, cannot change live recording params<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<a name=\"play\"><\/a>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3>Play a Recorded File<\/h3>\n\n\n\n<p>In case you want to play Recorded File directly from video Server, please note that those files are password protected. Portal Implemented HTTP Basic Authentication to secure recorded file storage.<\/p>\n\n\n\n<p>Therefore, any Video Player, may not use the file-paths only to play them from Video Server. Player must provide access credentials to pass through the authentication process to play the file. <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># https:\/\/pub.dev\/packages\/video_player\n\n\/\/ HTTP Basic Authentication Credentials\nString username = Username';\nString password = 'Password';\nString videoFilePath = 'URL';\n\nString basicAuth = 'Basic ' + base64Encode(utf8.encode('$username:$password'));\n\nVideoPlayerController _controller;\n_controller = VideoPlayerController.network(\n\tvideoFilePath,\n\thttpHeaders: {'authorization': basicAuth},);\n\n_controller.addListener(() {\n\tsetState(() {});\n});\n\n_controller.setLooping(true);\n_controller.initialize();<\/pre>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Note: <\/strong><\/p>\n\n\n\n<ul><li>There is an alternate way. You should download the files from Video Server to your Server and play from there without or with any security measure you may like to deploy. <\/li><li>Files from portal Storage gets deleted after 72 hours. So, accessing them from Video Server to play is not guaranteed beyond 72 hours. <\/li><\/ul>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator is-style-wide\"\/>\n\n\n\n<div class=\"wp-block-columns\">\n<div class=\"wp-block-column\">\n<p>\u2190 <a href=\"..\/custom-signalling\/\"><\/a><a href=\"..\/annotation\/\">Annotation<\/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=\"..\/hard-muting\/\">Hard Muting<\/a> \u2192<a href=\"\/developer\/how-to-use\/\"><\/a><\/p>\n<\/div>\n<\/div>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Using Portal you may get a RTC session recorded as individual streams and later be transcoded through a post-session service to create a single video file which can be retrieved and re-played using any Video Player. Recording can be started in 2 ways, viz. Table of Contents Ways to Record Auto Recording On-Demand Recording Get Recording Files Type of Files Use API to get Files Get Files delivered Get notified&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":"Using Portal you may get a RTC session recorded as individual streams and later be transcoded through a post-session service to create a single video file which can be retrieved and re-played using any Video Player. Recording can be started in 2 ways, viz. Table of Contents Ways to Record Auto Recording On-Demand Recording Get&hellip;","_links":{"self":[{"href":"https:\/\/doc.smartflomeet.ttns.in\/developer\/wp-json\/wp\/v2\/pages\/4743"}],"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=4743"}],"version-history":[{"count":0,"href":"https:\/\/doc.smartflomeet.ttns.in\/developer\/wp-json\/wp\/v2\/pages\/4743\/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=4743"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}