none
Radyo Playlist Hazırlama (XML) RRS feed

  • Genel Tartışma

  • Merhaba ben c# dilinde bir radyo programı hazırlamak istiyorum butonlarla yapıyorum ama ben örnek olarak www.ornek.com/1.xml

    (1.xml) dosyasında bulunan radyo sıra numarasını ve radyo ismini listboxa çekip listboxta göstermek istiyorum ve  listboxta ki radyo

    ismine tıkladığımda 1.xml dosyasında bulunan radyo adresini media playerde çalıştırmasını istiyorum bu konu hakkında yardımlarınızı

    bekliyorum bir örnek vererek gösterebilir misiniz. 

    7 Kasım 2016 Pazartesi 14:11

Tüm Yanıtlar

  • 1.xml in yapısını görsek daha rahat yanıt verebilirdik. Onun için sallama bir xml için örnek vereyim;

    <?xml version="1.0" encoding="utf-8" ?>
    <channels>
       <station id="1">
          <name><![CDATA[Trance One FM]]></name>
          <url><![CDATA[http://www.......]]></url>
       <station>
       <station id="2">
          <name><![CDATA[Astra Trance FM]]></name>
          <url><![CDATA[http://www.......]]></url>
       <station>
       .....
    </channels>
    
    ......
    listBox1.DataMember = "Name"; listBox1.ValueMember = "Url"; listBox1.DataSource = XDocument.Load("http://www.ornek.com/1.xml").Descandants("station").Select(p => new { Name = p.Element("name").Value, Url = p.Element("url").Value }).ToList();



    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com


    8 Kasım 2016 Salı 07:22
    Moderatör
  • Önay Bey yanıtınız için teşekkürederim haklısınız konuya bir xml örneği eklemem gerekirdi. Bu fikri düşünürken elinde xml dosyası yoktu o yüzden ekleyemedim. Yazmış olduğunuz kodlarda hangi referansları kullandınız listbox1.datamember ,XDocument.Load ve Descandants bu üçünde altı kırmızı çizili olarak referanslarda yok diye uyarıyor XDocument.Load için Using System.Xml.Linq ekledim sorun yok ama diğerlerini bulamadım. Listboxda Radyo adına tıkladığımızda media playerde nasıl çalacak. Birde vaktiniz varsa  xml dosyası yerine m3u uzantılı olarak hazırlasak nasıl yapabiliriz. örnek m3u dosyası

    #EXTM3U $BorpasFileFormat="1"
    #EXTINF:-1,977 The 80s Channel
    http://www.977music.com/tunein/web/80s3.asx
    #EXTINF:-1,1001 FM
    http://www.dostmedya.com/ply/1001fm.pls
    #EXTINF:-1,Kral 45`lik
    http://95.130.169.203:80/
    #EXTINF:-1,Kral 90`lar
    http://37.247.98.16:80/
    #EXTINF:-1,Kral Akustik
    http://37.247.98.18/

    yardımlarınız için teşekkürederim belki çok soru sordum ama c# ile birşeyler yapabilmek öğrenmek hoşuma gidiyor bir soru sormadan önce iyice araştırırım ve kendim öğrenmeye çalışırım ama bu konu hakkında yaptığım araştırmalarda genelde radyolar buton olarak eklenmiş ve exe ye kod olarak ilave edilmiş ama radyo adresleri değiştiği zaman sürekli programı düzenlemek pek mantıklı değil o yüzden internetteki bir xml veya m3u formatındaki dosyadan radyo isimlerini adreslerini nasıl çekeriz ve media playerde oynatırız merak ettim ve dosyada yaptığımız düzenleme daha kolay olacağından bu konu hakkında bilgi sahibi olmak istedim. Tesekkürederim.
    8 Kasım 2016 Salı 17:59
  • Orada harf hatası yapmışım, doğrusu Descendants olacak. Forumda intellisense olmayınca oluyo böyle.

    MediaPlayer olayına gelince, media playeri mi açmak istiyorsunuz yoksa uygulamanız içinde mi çalmak istiyorsunuz. Uygulmanız içinde alacaksanız view'inizi WPF ile hazırlamanızı öneririrm media element ile o url lerdeki media'yı kolayca yürütebilirsiniz. Winforms ta yapmak için ya DirectShow kullanmanız lazım ya da MEdiaPlayer componenti eklemeniz lazım.

    m3u olayına gelince; önce bir class hazırlarsınız;

    class PlayListItem
    {
       public string Name { get; set; }
       public Uri Url { get; set; }
    }
    

    ardından bir ViewModel;

    class PlayList
    {
        public delegate void PlayListLoadedEventHandler();
        public event PlayListLoadedEventHandler Loaded;
        private List<string> m3uFileLines;
    
        public ObservableCollection<PlayListItem> Items { get; private set; } = new ObservableCollection<PlayListItem>();
    
        public void Load(string Address)
        {
            m3uFileLines = Regex.Split(new WebClient().DownloadString(Address), Environment.NewLine).Skip(1).ToList();
            ItemList().ToList().ForEach(p => Items.Add(p));
            Loaded?.Invoke();
        }
    
        private IEnumerable<PlayListItem> ItemList()
        {
            for (int i = 0, j = 1; i < m3uFileLines.Count - 1; j+=2, i+=2)
                yield return new PlayListItem() { Name = m3uFileLines[i].Substring(m3uFileLines[i].IndexOf(',')+1), Source = new Uri(m3uFileLines[j]) };
        }
    }

    Bir view;

    public partial class MainWindow : Window
    {
        private PlayList playList = new PlayList();
    
        public MainWindow()
        {
            InitializeComponent();
            playList.Loaded += PlayList_Loaded;
        }
    
        private void PlayList_Loaded()
        {
            listViewItems.ItemsSource = playList.Items;
        }
    
        private void buttonNavigate_Click(object sender, RoutedEventArgs e)
        {
            playList.Load(textBoxPlayListUrl.Text);
        }
    
        private void listViewItems_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            labelStatus.Content = "Bağlanıyor...";
            mediaElementMain.Source = ((PlayListItem)listViewItems.SelectedItem).Source;
            mediaElementMain.Play();
        }
    
        private void mediaElementMain_BufferingStarted(object sender, RoutedEventArgs e)
        {
            labelStatus.Content = $"Tampona alınıyor (%{mediaElementMain.BufferingProgress})...";
        }
    
        private void mediaElementMain_BufferingEnded(object sender, RoutedEventArgs e)
        {
            labelStatus.Content = "Çalıyor...";
        }
    }

    Bu da xaml;

    <Window x:Class="RadioPlayer.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:RadioPlayer"
            mc:Ignorable="d"
            xmlns:vm="clr-namespace:RadioPlayer"
            Title="MainWindow" Height="400" Width="600" MinHeight="400" MinWidth="600">
        <Window.DataContext>
            <vm:PlayListItem></vm:PlayListItem>
        </Window.DataContext>
    
        <Grid Style="{DynamicResource mainGridStyle}">
            <Grid.RowDefinitions>
                <RowDefinition Height="40"></RowDefinition>
                <RowDefinition Height="*"></RowDefinition>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="200"></ColumnDefinition>
                <ColumnDefinition Width="*"></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <StackPanel Grid.ColumnSpan="2" Orientation="Horizontal">
                <Label Margin="5" VerticalContentAlignment="Center">Çalma Listesi</Label>
                <TextBox x:Name="textBoxPlayListUrl" Margin="5" VerticalContentAlignment="Center" MinWidth="300">file://C:\Users\AmonRa\Documents\sample.m3u</TextBox>
                <Button x:Name="buttonNavigate" Margin="5" MinWidth="40" Click="buttonNavigate_Click">...</Button>
            </StackPanel>
            <ListView x:Name="listViewItems" Grid.Row="1" Margin="5" ItemsSource="{Binding}" SelectionChanged="listViewItems_SelectionChanged">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <Label Content="{Binding Name}"></Label>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
            <StackPanel  Grid.Row="1" Grid.Column="1" VerticalAlignment="Top" Margin="5">
                <Label x:Name="labelStatus" Height="40" VerticalContentAlignment="Center"></Label>
                <Label x:Name="labelPosition" Height="40" VerticalContentAlignment="Center"></Label>
            </StackPanel>
    
            <MediaElement x:Name="mediaElementMain" Grid.Row="1" Grid.Column="1" LoadedBehavior="Manual" Visibility="Collapsed" MediaOpened="mediaElementMain_MediaOpened" MediaFailed="mediaElementMain_MediaFailed" BufferingStarted="mediaElementMain_BufferingStarted" BufferingEnded="mediaElementMain_BufferingEnded"></MediaElement>
        </Grid>
    </Window>
    

    Sonuç; fiesta forever ♬♫♪♪♫♪♬


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    8 Kasım 2016 Salı 22:01
    Moderatör
  • Hocam bende şöyle birşey yaptım

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace hadingari
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            public void ListeYukle()
            {
                
                string yol = Application.StartupPath; // Buraya www.örnek.com/list.m3u gelecek
                int say = -1;
                string liste = yol + "\\List.m3u"; // buradaki yol farklı olabilir ben bilgisayardan çalışacak şekilde yapabildim.
                StreamReader Oku = new StreamReader(liste, System.Text.Encoding.Default);
    
                while ((Oku.Peek() > -1))
               
                { listBox1.Items.Add(Oku.ReadLine());
                    listBox2.Items.Add(Oku.ReadLine());
                    say += 1;
                    label1.Text="Listede "+ say.ToString()+" Radyo İstasyonu var";
                    
                }
                    
                    Oku.Close();
                                       
               
          
    
        }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                ListeYukle();
            }
            
            private void listBox1_Click(object sender, EventArgs e)
            {
    
               /* mp.URL =  Burada listbox1 deki radyo ismine tıklayınca o radyo media playerde yada
                vlc playerde radyo çalacak (aynı form içindeki)*/ burada takıldım
            }
    }
         
                
            }

    8 Kasım 2016 Salı 23:00