+ tmp_buffer = amf_encode_element( AMF_DATATYPE_OBJECT, NULL );
+ rtmp_body_append( rtmp_body, tmp_buffer, AMF_DATATYPE_SIZE_OBJECT );
+ free( tmp_buffer );
+
+ tmp_buffer = amf_encode_object_variable( "level",
+ AMF_DATATYPE_STRING, "status" );
+ rtmp_body_append( rtmp_body, tmp_buffer,
+ AMF_DATATYPE_SIZE_OBJECT_VARIABLE + strlen( "level" ) +
+ AMF_DATATYPE_SIZE_STRING + strlen( "status" ) );
+ free( tmp_buffer );
+
+ tmp_buffer = amf_encode_object_variable( "code",
+ AMF_DATATYPE_STRING, "NetStream.Play.Reset" );
+ rtmp_body_append( rtmp_body, tmp_buffer,
+ AMF_DATATYPE_SIZE_OBJECT_VARIABLE + strlen( "code" ) +
+ AMF_DATATYPE_SIZE_STRING + strlen( "NetStream.Play.Reset" ) );
+ free( tmp_buffer );
+
+ description = (char *) malloc( strlen( "Playing and resetting ") + strlen( psz_media ) + strlen( "." ) + 1 );
+ if( !description )
+ {
+ free( rtmp_body->body );
+ free( rtmp_body );
+ return NULL;
+ }
+ sprintf( description, "Playing and resetting %s.", psz_media );
+ tmp_buffer = amf_encode_object_variable( "description",
+ AMF_DATATYPE_STRING, description );
+ rtmp_body_append( rtmp_body, tmp_buffer,
+ AMF_DATATYPE_SIZE_OBJECT_VARIABLE + strlen( "description" ) +
+ AMF_DATATYPE_SIZE_STRING + strlen( description ) );
+ free( tmp_buffer );
+ free( description );
+
+ tmp_buffer = amf_encode_object_variable( "details",
+ AMF_DATATYPE_STRING, psz_media );
+ rtmp_body_append( rtmp_body, tmp_buffer,
+ AMF_DATATYPE_SIZE_OBJECT_VARIABLE + strlen( "details" ) +
+ AMF_DATATYPE_SIZE_STRING + strlen( psz_media ) );
+ free( tmp_buffer );
+
+ tmp_buffer = amf_encode_object_variable( "clientid",
+ AMF_DATATYPE_NUMBER, &p_thread->stream_client_id );
+ rtmp_body_append( rtmp_body, tmp_buffer,
+ AMF_DATATYPE_SIZE_OBJECT_VARIABLE + strlen( "clientid" ) +
+ AMF_DATATYPE_SIZE_NUMBER );
+ free( tmp_buffer );
+
+ tmp_buffer = amf_encode_element ( AMF_DATATYPE_END_OF_OBJECT, NULL );
+ rtmp_body_append( rtmp_body, tmp_buffer, AMF_DATATYPE_SIZE_END_OF_OBJECT );
+ free( tmp_buffer );
+
+ rtmp_packet = rtmp_new_packet( p_thread, RTMP_DEFAULT_STREAM_INDEX_NOTIFY,
+ 0, RTMP_CONTENT_TYPE_INVOKE, RTMP_SRC_DST_DEFAULT, rtmp_body );
+ free( rtmp_body->body );
+ free( rtmp_body );
+
+ return rtmp_packet;
+}
+
+static rtmp_packet_t *
+rtmp_encode_NetStream_play_start_onStatus( rtmp_control_thread_t *p_thread, char *psz_media )
+{
+ rtmp_packet_t *rtmp_packet;
+ rtmp_body_t *rtmp_body;
+ uint8_t *tmp_buffer;
+ double number;
+ char *description;
+
+ /* Build NetStream.play.start onStatus */
+ rtmp_body = rtmp_body_new( -1 );
+
+ tmp_buffer = amf_encode_element( AMF_DATATYPE_STRING, "onStatus" );
+ rtmp_body_append( rtmp_body, tmp_buffer,
+ AMF_DATATYPE_SIZE_STRING + strlen( "onStatus" ) );
+ free( tmp_buffer );
+
+ number = 1; /* TODO: review this number*/