Esempio n. 1
0
kr_v4l2s *kr_v4l2s_create(kr_v4l2s_params *params) {
  kr_v4l2s *v4l2s;
  kr_v4l2_setup setup;
  kr_v4l2_mode mode;
  v4l2s = calloc(1, sizeof(kr_v4l2s));
  v4l2s->params = params;
  v4l2s->mkv = kr_mkv_create_stream(v4l2s->params->host, v4l2s->params->port,
   v4l2s->params->mount, v4l2s->params->password);
  if (v4l2s->mkv == NULL) {
    fprintf(stderr, "failed to stream :/ \n");
    exit(1);
  }
  v4l2s->vpx_enc = krad_vpx_encoder_create(v4l2s->params->width,
   v4l2s->params->height, 1000, 1, v4l2s->params->bitrate);
  kr_mkv_add_video_track(v4l2s->mkv, VP8, v4l2s->params->fps_num,
   v4l2s->params->fps_den, v4l2s->params->width, v4l2s->params->height);
  setup.dev = v4l2s->params->device;
  setup.priority = 0;
  mode.width = v4l2s->params->width;
  mode.height = v4l2s->params->height;
  mode.num = v4l2s->params->fps_num;
  mode.den = v4l2s->params->fps_den;
  mode.format = 0;
  v4l2s->v4l2 = kr_v4l2_create(&setup);
  kr_v4l2_mode_set(v4l2s->v4l2, &mode);
  return v4l2s;
}
Esempio n. 2
0
int main()
{
	kr_mkv_t *mkv_output;
	kr_mkv_t *mkv_input;
	kr_mkv_t *settings;

	krad_system_init();
//	krad_system_log_on("derp.log");
	playlist_t *playlist = playlist_init("test.txt");

	mkv_output = kr_mkv_create_stream(argv[1], atoi(argv[2]), argv[3], argv[4]);

	if(splice_init(settings, mkv_output, playlist) < 0)
	{
		perror("splice_init");
	}

	printf("resolution: %d x %d\n", mkv_output->tracks[VIDEO_TRACK].width,
					mkv_output->tracks[VIDEO_TRACK].height);

	uint32_t i;
	while(1)
	{
		playlist->current_entry = 0;
		for(i = 0; i < playlist_count(playlist); i++)
		{
			if(playlist_current_video(playlist) > 0)
			{
				printf("playing: %s\n", playlist_current_video(playlist));
				mkv_input = kr_mkv_open_file(playlist_current_video(playlist));

				if(!mkv_input)
				{
					perror(playlist_current_video(playlist));
				}

				splice(mkv_input, mkv_output);

				kr_mkv_destroy(&mkv_input);
				playlist_next(playlist);
			}
		}
	}

	kr_mkv_destroy(&mkv_output);
	playlist_destroy(playlist);

	return(0);
}
Esempio n. 3
0
krad_container_t *krad_container_create_stream (char *host, uint32_t port,
                                                char *mount, char *password) {

  krad_container_t *container;
  krad_container_type_t type;

  type = krad_container_select (mount);

  if ((type != OGG) && (type != MKV) && (type != KUDP)) {
    return NULL;
  }

  container = calloc (1, sizeof(krad_container_t));

  container->type = type;

  if (container->type == OGG) {
    //container->ogg = krad_ogg_open_stream (host, port, mount, password);
    if (container->ogg == NULL) {
      free (container);
      return NULL;
    }
  }

  if (container->type == MKV) {
    container->mkv = kr_mkv_create_stream (host, port, mount, password);
    if (container->mkv == NULL) {
      free (container);
      return NULL;
    }
  }

  if (container->type == KUDP) {
    container->udp = kr_udp (host, port, mount, password);
    if (container->udp == NULL) {
      free (container);
      return NULL;
    }
  }

  return container;
}
Esempio n. 4
0
kr_streamer_t *kr_streamer_create (kr_streamer_params_t *params) {

  kr_streamer_t *streamer;
  uint32_t c;

  streamer = calloc (1, sizeof(kr_streamer_t));

  streamer->params = params;

  streamer->params->channels = 2;
  streamer->params->sample_rate = 48000;

  streamer->client = kr_client_create ("krad streamer client");

  if (streamer->client == NULL) {
    fprintf (stderr, "Could not create KR client.\n");
    exit (1);
  }

  kr_connect (streamer->client, streamer->params->station);

  if (!kr_connected (streamer->client)) {
    fprintf (stderr, "Could not connect to %s krad radio daemon.\n",
             streamer->params->station);
    kr_client_destroy (&streamer->client);
    exit (1);
  }

  if (kr_compositor_get_info_wait (streamer->client,
                                   &streamer->width, &streamer->height,
                                   &streamer->fps_numerator, &streamer->fps_denominator) != 1) {
    fprintf (stderr, "Could not get compositor info!\n");
    kr_client_destroy (&streamer->client);
    exit (1);
  }

  streamer->frame_size = streamer->width * streamer->height * 4;
  //FIXME
  streamer->videoport = kr_videoport_create (streamer->client, 0);

  if (streamer->videoport == NULL) {
    fprintf (stderr, "Could not make videoport.\n");
    kr_client_destroy (&streamer->client);
    exit (1);
  } else {
    printf ("Working!\n");
  }

  kr_videoport_set_callback (streamer->videoport, new_frame, streamer);

  for (c = 0; c < streamer->params->channels; c++) {
    streamer->audio_ring[c] = krad_ringbuffer_create (2200000);
  }

  if (params->file != NULL) {
    streamer->mkv = kr_mkv_create_file (params->file);
  } else {
    streamer->mkv = kr_mkv_create_stream (streamer->params->host,
                                      streamer->params->port,
                                      streamer->params->mount,
                                      streamer->params->password);
  }

  if (streamer->mkv == NULL) {
    fprintf (stderr, "failed to stream :/ \n");
    exit (1);
  }

  streamer->vpx_enc = krad_vpx_encoder_create (streamer->params->width,
                                           streamer->params->height,
                                           streamer->fps_numerator,
                                           streamer->fps_denominator,
                                           streamer->params->video_bitrate);

  if (params->file != NULL) {
    krad_vpx_encoder_set_kf_max_dist (streamer->vpx_enc, 600);
  }

  kr_mkv_add_video_track (streamer->mkv, VP8,
                          streamer->fps_numerator,
                          streamer->fps_denominator,
                          streamer->params->width,
                          streamer->params->height);

  if (kr_mixer_get_info_wait (streamer->client, &streamer->params->sample_rate, NULL) != 1) {
    fprintf (stderr, "Could not get mixer info!\n");
    kr_client_destroy (&streamer->client);
    exit (1);
  }

  streamer->vorbis_enc = krad_vorbis_encoder_create (streamer->params->channels,
                                                     streamer->params->sample_rate,
                                                     streamer->params->audio_quality);

  kr_mkv_add_audio_track (streamer->mkv, VORBIS, streamer->params->sample_rate,
                          streamer->params->channels,
                          streamer->vorbis_enc->hdrdata,
                          3 +
                          streamer->vorbis_enc->header.sz[0] +
                          streamer->vorbis_enc->header.sz[1] +
                          streamer->vorbis_enc->header.sz[2]);
  //FIXME
  streamer->audioport = kr_audioport_create (streamer->client, "streamer2",
   0);
  kr_audioport_set_callback (streamer->audioport, audioport_process, streamer);

  streamer->frame_ring = krad_ringbuffer_create (90 * sizeof(krad_frame_t *));

  streamer->framepool = krad_framepool_create (streamer->width,
                                               streamer->height,
                                               8);

  return streamer;
}