<divclass="line"><aname="l00031"></a><spanclass="lineno"> 31</span> <spanclass="comment"> * Other error return codes are defined in {conn,writer,reader}.hh */</span></div>
<divclass="line"><aname="l00042"></a><spanclass="lineno"> 42</span> <spanclass="comment"> * Other error return codes are defined in {conn,writer,reader,srtp}.hh */</span></div>
<divclass="line"><aname="l00048"></a><spanclass="lineno"> 48</span> <spanclass="comment"> * For user-managed SRTP session, the media stream is not started</span></div>
<divclass="line"><aname="l00049"></a><spanclass="lineno"> 49</span> <spanclass="comment"> * until SRTP key has been added and all calls to push_frame() will fail</span></div>
<divclass="line"><aname="l00051"></a><spanclass="lineno"> 51</span> <spanclass="comment"> * Currently uvgRTP only supports key length of 16 bytes (128 bits)</span></div>
<divclass="line"><aname="l00052"></a><spanclass="lineno"> 52</span> <spanclass="comment"> * and salt length of 14 bytes (112 bits).</span></div>
<divclass="line"><aname="l00053"></a><spanclass="lineno"> 53</span> <spanclass="comment"> * If the key/salt is longer, it is implicitly truncated to correct length</span></div>
<divclass="line"><aname="l00054"></a><spanclass="lineno"> 54</span> <spanclass="comment"> * and if the key/salt is shorter a memory violation may occur</span></div>
<divclass="line"><aname="l00056"></a><spanclass="lineno"> 56</span> <spanclass="comment"> * Return RTP_OK on success</span></div>
<divclass="line"><aname="l00057"></a><spanclass="lineno"> 57</span> <spanclass="comment"> * Return RTP_INVALID_VALUE if "key" or "salt" is invalid</span></div>
<divclass="line"><aname="l00058"></a><spanclass="lineno"> 58</span> <spanclass="comment"> * Return RTP_NOT_SUPPORTED if user-managed SRTP was not specified in create_stream() */</span></div>
<divclass="line"><aname="l00215"></a><spanclass="lineno"> 215</span> <spanclass="comment">/* If system call dispatcher is enabled and calling application has special requirements</span></div>
<divclass="line"><aname="l00216"></a><spanclass="lineno"> 216</span> <spanclass="comment"> * for the deallocation of a frame, it may install a deallocation hook which is called</span></div>
<divclass="line"><aname="l00217"></a><spanclass="lineno"> 217</span> <spanclass="comment"> * when SCD has processed the frame</span></div>
<divclass="line"><aname="l00219"></a><spanclass="lineno"> 219</span> <spanclass="comment"> * Return RTP_OK on success</span></div>
<divclass="line"><aname="l00220"></a><spanclass="lineno"> 220</span> <spanclass="comment"> * Return RTP_INVALID_VALUE if "hook" is nullptr */</span></div>
<divclass="line"><aname="l00223"></a><spanclass="lineno"> 223</span> <spanclass="comment">/* If needed, a notification hook can be installed to uvgRTP that can be used as</span></div>
<divclass="line"><aname="l00224"></a><spanclass="lineno"> 224</span> <spanclass="comment"> * an information side channel to the internal state of the library.</span></div>
<divclass="line"><aname="l00226"></a><spanclass="lineno"> 226</span> <spanclass="comment"> * When uvgRTP encouters a situation it doesn't know how to react to,</span></div>
<divclass="line"><aname="l00227"></a><spanclass="lineno"> 227</span> <spanclass="comment"> * it calls the notify hook with certain notify reason number (src/util.hh).</span></div>
<divclass="line"><aname="l00228"></a><spanclass="lineno"> 228</span> <spanclass="comment"> * Upon receiving a notification, application may ignore it or act on it somehow</span></div>
<divclass="line"><aname="l00230"></a><spanclass="lineno"> 230</span> <spanclass="comment"> * Currently only one notification type is supported and only receiver uses notifications</span></div>
<divclass="line"><aname="l00232"></a><spanclass="lineno"> 232</span> <spanclass="comment"> * "arg" is optional argument that is passed to hook when it is called. It may be nullptr</span></div>
<divclass="line"><aname="l00234"></a><spanclass="lineno"> 234</span> <spanclass="comment"> * Return RTP_OK on success</span></div>
<divclass="line"><aname="l00235"></a><spanclass="lineno"> 235</span> <spanclass="comment"> * Return RTP_INVALID_VALUE if "hook" is nullptr */</span></div>
<divclass="line"><aname="l00252"></a><spanclass="lineno"> 252</span> <spanclass="comment">/* Setter and getter for media-specific config that can be used f.ex with Opus */</span></div>
<divclass="line"><aname="l00256"></a><spanclass="lineno"> 256</span> <spanclass="comment">/* Get unique key of the media stream</span></div>
<divclass="line"><aname="l00257"></a><spanclass="lineno"> 257</span> <spanclass="comment"> * Used by session to index media streams */</span></div>
<divclass="line"><aname="l00276"></a><spanclass="lineno"> 276</span> <spanclass="comment">/* Initialize the connection by initializing the socket</span></div>
<divclass="line"><aname="l00277"></a><spanclass="lineno"> 277</span> <spanclass="comment"> * and binding ourselves to specified interface and creating</span></div>
<divclass="line"><aname="l00278"></a><spanclass="lineno"> 278</span> <spanclass="comment"> * an outgoing address */</span></div>
<divclass="line"><aname="l00303"></a><spanclass="lineno"> 303</span> <spanclass="comment">/* Has the media stream been initialized */</span></div>
<divclass="line"><aname="l00310"></a><spanclass="lineno"> 310</span> <spanclass="comment">/* RTP packet dispatcher for the receiver */</span></div>
<divclass="line"><aname="l00314"></a><spanclass="lineno"> 314</span> <spanclass="comment">/* Media object associated with this media stream. */</span></div>
<divclass="line"><aname="l00317"></a><spanclass="lineno"> 317</span> <spanclass="comment">/* Thread that keeps the holepunched connection open for unidirectional streams */</span></div>
<divclass="ttc"id="aclassuvgrtp_1_1media__stream_html_a1134ff0271ad54bf1e07feed422118c2"><divclass="ttname"><ahref="classuvgrtp_1_1media__stream.html#a1134ff0271ad54bf1e07feed422118c2">uvgrtp::media_stream::get_rtcp</a></div><divclass="ttdeci">uvgrtp::rtcp * get_rtcp()</div><divclass="ttdoc">Get pointer to the RTCP object of the media stream.</div></div>
<divclass="ttc"id="aclassuvgrtp_1_1media__stream_html_a18975c5463df0664f1fd8ab495248dcc"><divclass="ttname"><ahref="classuvgrtp_1_1media__stream.html#a18975c5463df0664f1fd8ab495248dcc">uvgrtp::media_stream::push_frame</a></div><divclass="ttdeci">rtp_error_t push_frame(uint8_t *data, size_t data_len, uint32_t ts, int flags)</div><divclass="ttdoc">Send data to remote participant with a custom timestamp.</div></div>
<divclass="ttc"id="aclassuvgrtp_1_1media__stream_html_a441263e19be4383223884fde8838f736"><divclass="ttname"><ahref="classuvgrtp_1_1media__stream.html#a441263e19be4383223884fde8838f736">uvgrtp::media_stream::pull_frame</a></div><divclass="ttdeci">uvgrtp::frame::rtp_frame * pull_frame(size_t timeout)</div><divclass="ttdoc">Poll a frame for a specified time from the media stream object.</div></div>
<divclass="ttc"id="aclassuvgrtp_1_1media__stream_html_a85fed1e02b97326d3b794551f0677e2b"><divclass="ttname"><ahref="classuvgrtp_1_1media__stream.html#a85fed1e02b97326d3b794551f0677e2b">uvgrtp::media_stream::push_frame</a></div><divclass="ttdeci">rtp_error_t push_frame(std::unique_ptr< uint8_t[]> data, size_t data_len, uint32_t ts, int flags)</div><divclass="ttdoc">Send data to remote participant with a custom timestamp.</div></div>
<divclass="ttc"id="aclassuvgrtp_1_1media__stream_html_ab2b7507d5b2c76bef74c9bceec07ba18"><divclass="ttname"><ahref="classuvgrtp_1_1media__stream.html#ab2b7507d5b2c76bef74c9bceec07ba18">uvgrtp::media_stream::push_frame</a></div><divclass="ttdeci">rtp_error_t push_frame(uint8_t *data, size_t data_len, int flags)</div><divclass="ttdoc">Send data to remote participant with a custom timestamp.</div></div>
<divclass="ttc"id="aclassuvgrtp_1_1media__stream_html_ab2e79cf2f90f81a90ae9c22e0c1fb01e"><divclass="ttname"><ahref="classuvgrtp_1_1media__stream.html#ab2e79cf2f90f81a90ae9c22e0c1fb01e">uvgrtp::media_stream::push_frame</a></div><divclass="ttdeci">rtp_error_t push_frame(std::unique_ptr< uint8_t[]> data, size_t data_len, int flags)</div><divclass="ttdoc">Send data to remote participant with a custom timestamp.</div></div>
<divclass="ttc"id="aclassuvgrtp_1_1media__stream_html_addf1cde9cb8c4e4af3160ce24c4288a5"><divclass="ttname"><ahref="classuvgrtp_1_1media__stream.html#addf1cde9cb8c4e4af3160ce24c4288a5">uvgrtp::media_stream::configure_ctx</a></div><divclass="ttdeci">rtp_error_t configure_ctx(int flag, ssize_t value)</div><divclass="ttdoc">Configure the media stream, see RTP_CTX_CONFIGURATION_FLAGS for more details.</div></div>
<divclass="ttc"id="aclassuvgrtp_1_1media__stream_html_ae2fe9e8d9b67e25f103a78a25417149f"><divclass="ttname"><ahref="classuvgrtp_1_1media__stream.html#ae2fe9e8d9b67e25f103a78a25417149f">uvgrtp::media_stream::pull_frame</a></div><divclass="ttdeci">uvgrtp::frame::rtp_frame * pull_frame()</div><divclass="ttdoc">Poll a frame indefinitely from the media stream object.</div></div>