Ejemplo n.º 1
0
void flv_packet_mux(struct encoder_packet *packet,
		uint8_t **output, size_t *size, bool is_header)
{
	struct array_output_data data;
	struct serializer s;

	array_output_serializer_init(&s, &data);

	if (packet->type == OBS_ENCODER_VIDEO)
		flv_video(&s, packet, is_header);
	else
		flv_audio(&s, packet, is_header);

	*output = data.bytes.array;
	*size   = data.bytes.num;
}
Ejemplo n.º 2
0
bool flv_meta_data(obs_output_t *context, uint8_t **output, size_t *size,
		bool write_header, size_t audio_idx)
{
	struct array_output_data data;
	struct serializer s;
	uint8_t *meta_data = NULL;
	size_t  meta_data_size;
	uint32_t start_pos;

	array_output_serializer_init(&s, &data);

	if (!build_flv_meta_data(context, &meta_data, &meta_data_size,
				audio_idx)) {
		bfree(meta_data);
		return false;
	}

	if (write_header) {
		s_write(&s, "FLV", 3);
		s_w8(&s, 1);
		s_w8(&s, 5);
		s_wb32(&s, 9);
		s_wb32(&s, 0);
	}

	start_pos = serializer_get_pos(&s);

	s_w8(&s, RTMP_PACKET_TYPE_INFO);

	s_wb24(&s, (uint32_t)meta_data_size);
	s_wb32(&s, 0);
	s_wb24(&s, 0);

	s_write(&s, meta_data, meta_data_size);

	s_wb32(&s, (uint32_t)serializer_get_pos(&s) - start_pos - 1);

	*output = data.bytes.array;
	*size   = data.bytes.num;

	bfree(meta_data);
	return true;
}
Ejemplo n.º 3
0
void flv_meta_data(obs_output_t context, uint8_t **output, size_t *size)
{
	struct array_output_data data;
	struct serializer s;
	uint8_t *meta_data;
	size_t  meta_data_size;
	uint32_t start_pos;

	array_output_serializer_init(&s, &data);

	build_flv_meta_data(context, &meta_data, &meta_data_size);

#ifdef WRITE_FLV_HEADER
	s_write(&s, "FLV", 3);
	s_w8(&s, 1);
	s_w8(&s, 5);
	s_wb32(&s, 9);
	s_wb32(&s, 0);
#endif

	start_pos = serializer_get_pos(&s);

	s_w8(&s, RTMP_PACKET_TYPE_INFO);

	s_wb24(&s, (uint32_t)meta_data_size);
	s_wb32(&s, 0);
	s_wb24(&s, 0);

	s_write(&s, meta_data, meta_data_size);

	s_wb32(&s, (uint32_t)serializer_get_pos(&s) - start_pos + 4 - 1);

	*output = data.bytes.array;
	*size   = data.bytes.num;

	bfree(meta_data);
}