Ejemplo n.º 1
0
        public ObservableCollection <TargetMedia> ExecuteSqlQueryAllMedia(string connectionString, string query)
        {
            using (var conn = new NpgsqlConnection(connectionString))
            {
                conn.Open();
                using (var cmd = new NpgsqlCommand())
                {
                    cmd.Connection  = conn;
                    cmd.CommandText = query;

                    using (var reader = cmd.ExecuteReader())
                    {
                        var targets = new ObservableCollection <TargetMedia>();
                        while (reader.Read())
                        {
                            var tm = new TargetMedia
                            {
                                content    = reader.GetString(0),
                                direction  = reader.GetInt16(1),
                                start_time = reader.GetDateTime(2),
                                end_time   = reader.GetDateTime(3)
                            };

                            if (string.IsNullOrEmpty(tm.content))
                            {
                                tm.content = @"{{{ NOT INTERCEPTED }}}";
                            }
                            targets.Add(tm);
                        }
                        return(targets);
                    }
                }
            }
        }
        protected override void OnCreate(Bundle savedInstanceState)
        {
            context = this;

            base.OnCreate(savedInstanceState);
            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            SetContentView(Resource.Layout.activity_main);

            var toolbar = FindViewById<Toolbar>(Resource.Id.toolbar);
            SetSupportActionBar(toolbar);

            var processButton = FindViewById<Button>(Resource.Id.processButton);
            processButton.Click += ProcessButton_Click;

            _playerView = FindViewById<PlayerView>(Resource.Id.playerView);

            _sourceMedia = new SourceMedia();
            _targetMedia = new TargetMedia();
            _transformationState = new TransformationState();
            _trimConfig = new TrimConfig();

            _mediaTransformer = new MediaTransformer(this);


            var builder = new SimpleExoPlayer.Builder(this);
            _player = builder.Build();

            _player.PlayWhenReady = true;
            _playerView.Player = _player;
        }
Ejemplo n.º 3
0
 public void OnEventHandler(MediaSelected e)
 {
     SelectedMedia = e.TargetMedia;
 }
        public void TranscodeAudio(SourceMedia sourceMedia,
                              TargetMedia targetMedia,
                              TrimConfig trimConfig,
                              TransformationState transformationState)
        {


            if (targetMedia.targetFile.Exists())
            {
                targetMedia.targetFile.Delete();
            }

            transformationState.requestId = UUID.RandomUUID().ToString();

            /*
            MediaTransformationListener transformationListener = new MediaTransformationListener(context,
                    transformationState.requestId,
                    transformationState,
                    targetMedia);
            */

            MediaRange mediaRange = trimConfig.enabled
                    ? new MediaRange(
                    TimeUnit.Milliseconds.ToMicros((long)(trimConfig.range[0] * 1000)),
                    TimeUnit.Milliseconds.ToMicros((long)(trimConfig.range[1] * 1000)))
                    : new MediaRange(0, long.MaxValue);

            try
            {
                var targetMimeType = targetMedia.writeToWav ? "audio/raw" : "audio/mp4a-latm";
                IMediaTarget mediaTarget;

                if (targetMedia.writeToWav)
                {
                    mediaTarget = new WavMediaTarget(targetMedia.targetFile.Path);
                }
                else
                {
                    mediaTarget = new MediaMuxerMediaTarget(targetMedia.targetFile.Path, 1, 0, (int)MuxerOutputType.Mpeg4);
                }
                var mediaSource = new MediaExtractorMediaSource(context, sourceMedia.uri, mediaRange);
                List<TrackTransform> trackTransforms = new List<TrackTransform>(1);

                foreach (TargetTrack targetTrack in targetMedia.tracks)
                { 
                    if (targetTrack.format is AudioTrackFormat trackFormat)
                    {
                        MediaFormat mediaFormat = MediaFormat.CreateAudioFormat(
                                targetMimeType,
                                trackFormat.samplingRate,
                                trackFormat.channelCount);
                        mediaFormat.SetInteger(MediaFormat.KeyBitRate, trackFormat.bitrate);
                        mediaFormat.SetLong(MediaFormat.KeyDuration, trackFormat.duration);

                        IEncoder encoder;
                        if (targetMedia.writeToWav)
                        {
                            encoder = new PassthroughBufferEncoder(8192);
                        }
                        else
                        {
                            encoder = new MediaCodecEncoder();
                        }
                        //IEncoder encoder = targetMedia.writeToWav ? new PassthroughBufferEncoder(8192) : new MediaCodecEncoder();
                        TrackTransform trackTransform = new TrackTransform.Builder(mediaSource, targetTrack.sourceTrackIndex, mediaTarget)
                                .SetTargetTrack(0)
                                .SetDecoder(new MediaCodecDecoder())
                                .SetEncoder(encoder)
                                .SetRenderer(new AudioRenderer(encoder))
                                .SetTargetFormat(mediaFormat)
                                .Build();


                        trackTransforms.Add(trackTransform);
                        break;
                    }
                }

                _mediaTransformer.Transform(
                    transformationState.requestId,
                    trackTransforms,
                    this,
                    MediaTransformer.GranularityDefault);
            }
            catch (System.Exception err)
            {
                System.Diagnostics.Debug.WriteLine($"Exception when trying to transcode audio: {err.Message}");
            }
        }
        void ApplyWatermark(SourceMedia sourceMedia,
                              TargetMedia targetMedia,
                              TrimConfig trimConfig,
                              TransformationState transformationState)
        {
            if (targetMedia.targetFile.Exists())
            {
                targetMedia.targetFile.Delete();
            }

            transformationState.requestId = UUID.RandomUUID().ToString();

            /*
            MediaTransformationListener transformationListener = new MediaTransformationListener(this,
                    transformationState.requestId,
                    transformationState,
                    targetMedia);
            */

            var resourceId = Resource.Drawable.test_image_1;
            var watermarkUri = new Uri.Builder()
                .Scheme(ContentResolver.SchemeAndroidResource)
                .Authority(Resources.GetResourcePackageName(resourceId))
                .AppendPath(Resources.GetResourceTypeName(resourceId))
                .AppendPath(Resources.GetResourceEntryName(resourceId))
                .Build();



            List<IGlFilter> watermarkImageFilter = null;
            foreach (TargetTrack targetTrack in targetMedia.tracks)
            {

                if (targetTrack is TargetVideoTrack targetVideoTrack) 
                {
                    targetVideoTrack.overlay = watermarkUri;

                    watermarkImageFilter = createGlFilters(
                        sourceMedia,
                        (TargetVideoTrack)targetTrack,
                        0.2f,
                        new PointF(0.8f, 0.8f),
                        0);
                    break;
                }
            }

            
            MediaRange mediaRange = trimConfig.enabled
                    ? new MediaRange(
                    TimeUnit.Milliseconds.ToMicros((long)(trimConfig.range[0] * 1000)),
                    TimeUnit.Milliseconds.ToMicros((long)(trimConfig.range[1] * 1000)))
                    : new MediaRange(0, long.MaxValue);
            TransformationOptions transformationOptions = new TransformationOptions.Builder()
                    .SetGranularity(MediaTransformer.GranularityDefault)
                    .SetVideoFilters(watermarkImageFilter)
                    .SetSourceMediaRange(mediaRange)
                    .Build();

            _mediaTransformer.Transform(
                    _transformationState.requestId,
                    _sourceMedia.uri,
                    targetMedia.targetFile.Path,
                    null,
                    null,
                    this,
                    transformationOptions);
      

        }