public int OpenStream(string fileName) { FileName = fileName; FolderComplete = Torrent.file.paths.Count == 1 ? config.DownloadPath : Torrent.data.folder; fileIndex = Torrent.file.paths.IndexOf(fileName); FileSize = Torrent.file.lengths[fileIndex]; downloadNextStarted = false; fileIndexNext = -1; if (Torrent.data.files[fileIndex] != null && !Torrent.data.files[fileIndex].Created) { player.UrlType = InputType.TorrentPart; } else if (File.Exists(Path.Combine(FolderComplete, FileName))) { player.UrlType = InputType.TorrentFile; } else { return(-1); } int ret; bitSwarm.FocusAreInUse = false; bitSwarmOpt.EnableBuffering = true; if (player.UrlType == InputType.TorrentPart) { bitSwarm.IncludeFiles(new List <string>() { fileName }); if (!bitSwarm.isRunning) { Log("Starting"); bitSwarm.Start(); } ret = player.decoder.Open(Torrent.GetTorrentStream(FileName)); } else { if (!DownloadNext()) { Log("Pausing"); bitSwarm.Pause(); } //if (Torrent.data.files[fileIndex] != null && Torrent.data.files[fileIndex].Created) //ret = player.decoder.Open(Torrent.GetTorrentStream(FileName)); //else ret = player.decoder.Open(Path.Combine(FolderComplete, FileName)); } bitSwarmOpt.EnableBuffering = false; return(ret); }
private void button2_Click(object sender, EventArgs e) { if (listBox1.SelectedItems.Count < 1 || torrent == null) { return; } List <string> fileNames = new List <string>(); foreach (var o in listBox1.SelectedItems) { fileNames.Add(o.ToString()); } bitSwarm.IncludeFiles(fileNames); requestedBytes = 0; for (int i = 0; i < torrent.file.paths.Count; i++) { foreach (string fileName in fileNames) { if (fileName == torrent.file.paths[i]) { requestedBytes += torrent.file.lengths[i]; break; } } } output.Text += "\r\nNew Total Size Requested: " + Utils.BytesToReadableString(requestedBytes) + "\r\n"; }
private static void BitSwarm_MetadataReceived(object source, BitSwarm.MetadataReceivedArgs e) { string selectedFile = null; List <string> movieFiles = Utils.GetMoviesSorted(e.Torrent.file.paths); // Choose file from available video files WriteLine($"======= Available files ({movieFiles.Count}) ======="); foreach (var file in movieFiles) { selectedFile = file; WriteLine(" + " + selectedFile); break; } // Prepare BitSwarm & LibVLC for the selected file bitSwarm.IncludeFiles(new List <string>() { selectedFile }); using var media = new Media(libVLC, new StreamMediaInput(e.Torrent.GetTorrentStream(selectedFile))); mediaPlayer = new MediaPlayer(media); // Start VLC Player Thread player = new Thread(() => { mediaPlayer.Play(); }); player.IsBackground = true; player.Start(); // Simulate Seek after 40secs at 50% of the movie //Thread seekSample = new Thread(() => //{ // Thread.Sleep(40000); // WriteLine("Seeking Sample at 50%"); // mediaPlayer.Position = 0.5f; //}); //seekSample.IsBackground = true; //seekSample.Start(); }
public int SetMediaFile(string fileName) { Log($"{streamType.ToString()}: File Selected {fileName}"); if (streamType == StreamType.TORRENT) { Pause(); FileName = fileName; fileIndex = torrent.file.paths.IndexOf(fileName); FileSize = torrent.file.lengths[fileIndex]; fileDistance = 0; for (int i = 0; i < fileIndex; i++) { fileDistance += torrent.file.lengths[i]; } fileLastPiece = FilePosToPiece(FileSize); if (sortedPaths == null) { sortedPaths = Utils.GetMoviesSorted(torrent.file.paths); } downloadNextStarted = false; fileIndexNext = -1; FolderComplete = torrent.file.paths.Count == 1 ? config.DownloadPath : torrent.data.folder; if (torrent.data.files[fileIndex] != null) { if (!torrent.data.files[fileIndex].Created) { bitSwarm.IncludeFiles(new List <string>() { fileName }); if (!bitSwarm.isRunning) { bitSwarm.Start(); } } } // Both complete & incomplete files are missing! else { if (File.Exists(Path.Combine(FolderComplete, FileName))) { status = Status.OPENED; if (!DownloadNext()) { bitSwarm.Pause(); } player.UrlType = MediaRouter.InputType.TorrentFile; return(player.decoder.Open(Path.Combine(FolderComplete, FileName))); } else { return(-5); // File Missing?! } } player.UrlType = MediaRouter.InputType.TorrentPart; status = Status.BUFFERING; player.renderer.NewMessage(OSDMessage.Type.Buffering, $"Buffering ...", null, 30000); Log($"[BB OPENING]"); int ret = decoder.Open(null, "", "", "", DecoderRequestsBuffer, FileSize); if (ret != 0) { return(ret); } Log($"[DD OPENING]"); ret = player.decoder.Open(null, "", "", "", DecoderRequests, FileSize); if (ret != 0) { return(ret); } status = Status.OPENED; DownloadNext(); return(ret); } else { Log($"[BB OPENING]"); int ret = decoder.Open(null, "", "", "", DecoderRequestsBuffer, FileSize); if (ret != 0) { return(ret); } Log($"[DD OPENING]"); ret = player.decoder.Open(null, "", "", "", DecoderRequests, FileSize); if (ret != 0) { return(ret); } return(0); } }
public int SetMediaFile(string fileName) { Log($"File Selected {fileName}"); if (streamType == StreamType.FILE) { int ret = decoder.Open(null, "", "", "", DecoderRequestsBuffer, fileSize); return(ret); } else if (streamType == StreamType.TORRENT) { Pause(); fileIndex = torrent.file.paths.IndexOf(fileName); fileSize = torrent.file.lengths[fileIndex]; fileDistance = 0; for (int i = 0; i < fileIndex; i++) { fileDistance += torrent.file.lengths[i]; } if (!torrent.data.files[fileIndex].FileCreated) { tsStream.IncludeFiles(new List <string>() { fileName }); } if (!torrent.data.files[fileIndex].FileCreated && !tsStream.isRunning) { tsStream.Start(); } status = Status.BUFFERING; if (sortedPaths == null) { sortedPaths = new List <string>(); foreach (var path in torrent.file.paths) { sortedPaths.Add(path); } sortedPaths.Sort(new Utils.NaturalStringComparer()); } downloadNextStarted = false; Log($"[BB OPENING]"); int ret = decoder.Open(null, "", "", "", DecoderRequestsBuffer, fileSize); if (ret != 0) { return(ret); } Log($"[DD OPENING]"); ret = player.decoder.Open(null, "", "", "", DecoderRequests, fileSize); player.decoder.video.url = fileName; if (ret == 0 && (player.DownloadSubs == MediaRouter.DownloadSubsMode.FilesAndTorrents || player.DownloadSubs == MediaRouter.DownloadSubsMode.Torrents)) { if (!torrent.data.files[fileIndex].FileCreated) { while (torrent.data.progress.GetFirst0(FilePosToPiece(0), FilePosToPiece(0 + 65536)) != -1 || torrent.data.progress.GetFirst0(FilePosToPiece(fileSize - 65536), FilePosToPiece(fileSize - 65536 + 65536)) != -1) { CreateFocusPoint(0, 65536); CreateFocusPoint(fileSize - 65536, 65536); Thread.Sleep(50); } } using (MemoryStream ms = new MemoryStream()) { ms.Write(torrent.data.files[fileIndex].Read(0, 65536), 0, 65536); ms.Write(torrent.data.files[fileIndex].Read(fileSize - 65536, 65536), 0, 65536); ms.Position = 0; string hash = Utils.ToHexadecimal(OpenSubtitles.ComputeMovieHash(ms, fileSize)); player.FindAvailableSubs(fileName, hash, fileSize); } } else if (ret == 0) { player.OpenNextAvailableSub(); } status = Status.OPENED; DownloadNext(); return(ret); } return(-1); }
public void UpdateFilesToDownload(List <string> filesToDownload) { _bitSwarm.IncludeFiles(filesToDownload); }