SDK API Examples — Media Communications Mesh
SMPTE ST 2110-20 uncompressed video receiver example
int main (void )
{
/* Default client configuration */
const char * client_config = R "(
{
" apiVersion ": " v1 ",
" apiConnectionString ": " Server = 127.0 .0 .1 ; Port = 8002 "
}
)";
// Receiver connection configuration
const char * conn_config = R "(
{
" connection ": {
" st2110 ": {
" transport ": " st2110 - 20 ",
" ipAddr ": " 224.0 .0 .1 ",
" port ": 9002,
" multicastSourceIpAddr ": " 192.168 .95 .10 ",
" pacing ": " narrow ",
" payloadType ": 112,
" transportPixelFormat ": " yuv422p10rfc4175 "
},
},
" payload ": {
" video ": {
" width ": 1920,
" height ": 1080,
" fps ": 60.0,
" pixelFormat ": " yuv422p10le "
}
}
}
)" ;
MeshConnection * conn ;
MeshClient * mc ;
int err ;
int i , n ;
/* Create a mesh client */
err = mesh_create_client (& mc , client_config );
if (err ) {
printf ("Failed to create mesh client: %s (%d)\n" , mesh_err2str (err ), err );
exit (1 );
}
/* Create a mesh receiver connection */
err = mesh_create_rx_connection (mc , & conn , conn_config );
if (err ) {
printf ("Failed to create connection: %s (%d)\n" , mesh_err2str (err ), err );
goto exit_delete_client ;
}
/* Receive data loop */
for (;;) {
MeshBuffer * buf ;
/* Receive a buffer from the mesh */
err = mesh_get_buffer (conn , & buf );
if (err == MESH_ERR_CONNECTION_CLOSED ) {
printf ("Connection closed\n" );
break ;
}
if (err ) {
printf ("Failed to get buffer: %s (%d)\n" , mesh_err2str (err ), err );
break ;
}
/* Process the received user data */
get_user_video_frames (buf -> payload_ptr , buf -> payload_len );
/* Release and put the buffer back to the mesh */
err = mesh_put_buffer (& buf );
if (err ) {
printf ("Failed to put buffer: %s (%d)\n" , mesh_err2str (err ), err );
break ;
}
}
/* Shutdown the connection */
err = mesh_shutdown_connection (& conn );
if (err )
printf ("Failed to shutdown connection: %s (%d)\n" , mesh_err2str (err ), err );
/* Delete the media connection */
mesh_delete_connection (& conn );
exit_delete_client :
/* Delete the mesh client */
mesh_delete_client (& mc );
if (err )
exit (1 );
}
SMPTE ST 2110-20 uncompressed video sender example
int main (void )
{
/* Default client configuration */
const char * client_config = R "(
{
" apiVersion ": " v1 ",
" apiConnectionString ": " Server = 127.0 .0 .1 ; Port = 8002 "
}
)";
// Transmitter connection configuration
const char * conn_config = R "(
{
" connection ": {
" st2110 ": {
" transport ": " st2110 - 20 ",
" ipAddr ": " 224.0 .0 .1 ",
" port ": 9002,
" pacing ": " narrow ",
" payloadType ": 112,
" transportPixelFormat ": " yuv422p10rfc4175 "
},
},
" payload ": {
" video ": {
" width ": 1920,
" height ": 1080,
" fps ": 60.0,
" pixelFormat ": " yuv422p10le "
}
}
}
)" ;
MeshConnection * conn ;
MeshClient * mc ;
int err ;
int i , n ;
/* Create a mesh client */
err = mesh_create_client (& mc , client_config );
if (err ) {
printf ("Failed to create mesh client: %s (%d)\n" , mesh_err2str (err ), err );
exit (1 );
}
/* Create a mesh transmitter connection */
err = mesh_create_tx_connection (mc , & conn , conn_config );
if (err ) {
printf ("Failed to create connection: %s (%d)\n" , mesh_err2str (err ), err );
goto exit_delete_client ;
}
/* 1000 video frames to be sent */
n = 1000 ;
/* Send data loop */
for (i = 0 ; i < n ; i ++ ) {
MeshBuffer * buf ;
/* Ask the mesh to allocate a shared memory buffer for user data */
err = mesh_get_buffer (conn , & buf );
if (err ) {
printf ("Failed to get buffer: %s (%d)\n" , mesh_err2str (err ), err );
break ;
}
/* Fill the buffer with user data */
put_user_video_frames (buf -> payload_ptr , buf -> payload_len );
/* Put some time interval between the frames */
enforce_user_frame_send_interval ();
/* Send the buffer */
err = mesh_put_buffer (& buf );
if (err ) {
printf ("Failed to put buffer: %s (%d)\n" , mesh_err2str (err ), err );
break ;
}
}
/* Shutdown the connection */
err = mesh_shutdown_connection (& conn );
if (err )
printf ("Failed to shutdown connection: %s (%d)\n" , mesh_err2str (err ), err );
/* Delete the media connection */
mesh_delete_connection (& conn );
exit_delete_client :
/* Delete the mesh client */
mesh_delete_client (& mc );
if (err )
exit (1 );
}