Ubuntu üzerinde Ses azaltıp arttırma ve Media playerda Şarkı değiştirme C kodu

Başlatan Kaanx, 11 Nisan 2014 - 22:39:30

« önceki - sonraki »

0 Üyeler ve 2 Ziyaretçi konuyu incelemekte.

Kaanx

Hocam haklısınız suan sınav dönemi oldugu ıcın bende oturup bişiler yazamadım acıkcası. Ama olay aslında gayet basit yukarıda paylastıgım resimde video capture yaptıgım bir alan var ve uzerıne bem bir panel koydum. Orada video capture yaptıgım yerin yanındada bir frame daha olucak ondada Stream tv akısı olucak ben panelin oldugu frame ile stream akısı olan tv yayınını kontrol edicem. Ses acma kapama işlemi genel system file dan alıyoruz su kısımda yapmamız gereken ise kanal değişimini nasıl yapabiliriz işte bu kısımda olay beni fazlasıyla aşıyor :)

sem

Bu benim daha önceden hiç ilgilenmediğim bir alan. O nedenle pek yorumlayamıyorum. Bu nedenle ben de size şunu sorayım; kanal değiştirme işlemi ne demek oluyor böyle bir uygulamada. Her bir kanal farklı IP adresinden mi geliyor. Ya da TCP/IP üzerinden bir kanala bir komut gönderip farklı bir kanal ismi belirterek bu kanalın stream'i mi talep ediliyor?

Yani nasıl yapılacağınsan ziyade ne yapılacağı konusunda ben de yorum yapamıyorum. Teknik detayları verirseniz, beraber fikir yürütelim. Farz edelim ki üç kanal varİ

kanal1
kanal2
kanal3

Kullanıcı uygulamayı açtı. Bir IP adresinden kanal1 gösterilmeye başlandı kullanıcıya. Daha sonradan kullanıcı kanal2'ye geçmek istediğinde, ne yapılması gerekiyor? kanal1 ile kanal2 arasında bağlantı ya da fark nedir? En açık hali ile bunu sorayım.
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?


sem

Bu durumda ben size yardımcı olmayacağım gibi. Çünkü yapılanlar üzerinden belki bir yol izlerim ve hatayı araştırıp tespit edebilirim diye düşünüyordum. Fakat sıfırdan destek konusunda yardımcı olamayacağım.

konuya hakim olan arkadaşların sıfırdan destek için zamanı vardır umarım.

Kolay gelsin, iyi çalışmalar.
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

Kaanx

Teşekkür ederim hocam Sınav dönemi bitsin kodlama kısmında herşey daha acık olucak gibi geliyor bana. O zaman daha iyi ilerleyebiliriz diye dusunuyorum.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 17 Nisan 2014 - 18:28:03

Ve hocam acaba bu işlemleri Kinect kullanarak daha rahat  yapabilir miyiz bu konuda fikriniz var MI ?

sem

Kinect hakkında bilgim yok fakat ilk araştırmamda gördüğüm kadarı ile Windows tarafından geliştirilen bir donanım sanırım. Bu donanım ile haberleş vs. gibi konuları açıkcası işi daha da yokuşa sürebilir. Çünkü konu hakkında bilgi sahibi olan kişilere danışmak gerektiğinde ne gibi bir desteği olur, forumları var mı vs. gibi konuları araştırmak gerekebilir. Belki de daha kolay da çözülebilir tabi. Fakat bilinmeyen bir donanıma geçiş yapmış olacaksınız. Geliştirmesi süresini muhakkak biraz daha uzatır diye tahmin ediyorum.
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

Kaanx

Haklısınız hocam bende yapmıs oldugm araştırmalarda farkettim. Ubuntu üzerindede geliştirme platformu var fakat bendeki donanım buna yetmeyebilir.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 18 Nisan 2014 - 22:47:25

Hocam Debian üzerinde IP TV uygulaması vaar mı bildiğiniz. RaspBeryy Pi üzerinde live tv stream yapamay calısıyorum suan ve hep xbmc ve ya raspbmc olarak örnekler verilmiş durumda. Başka alternatif olarak ne kullanabilirim   ?


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 18 Nisan 2014 - 22:59:13

Ben su linkleri buldum hocam işimize yarayanlar olur mu vaktiniz varsa bakabilir minisiz ?


http://akinoshi.blogspot.com.tr/2013/05/configure-raspberry-pi-as-video-player.html

http://raspyplayer.org/

http://raspyplayer.org/pimp.html

http://elinux.org/Omxplayer // system dosyasında yaptıgımız gibi buradada kodumuzun içine bash ten calısan komutları ekleyip çalışmasını sağlayabilir myiz ?  mesela ben Opencv ile yazdıgım kodu çalıştırdıgımda omxplayer a canlıtvizle.com dan stream akısı olucak ? böyle bişi yapabılabilir mi ?

http://www.cenolan.com/2013/03/looping-video-playlist-omxplayer-raspberry-pi/

hocam sizinde cevaplarınızı bekliyorum öncelikle yayını alıp gösterdikten sonra kanal değişimine bakarız diye dusunuyorum sizinde dedğinize geiyor olay :)


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 19 Nisan 2014 - 12:02:43

Güncel ---

Kaanx

Hocam FreeTuxTv işimizi görükce gibi terminalden freetux tv verdiğimde başlıyor çalışmaya :)
Bunu önce Pc üzerinde sonra raspberry de denedim güzel stream alıyorum :) . Burada değişim yapıcaz hocam artık işte :) ve programı çalıştırdıgımda otomatik olarak bu uygulamada başlamalı




http://i.hizliresim.com/ZNDYZV.png




Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 20 Nisan 2014 - 11:37:08

Hocam ben Freetuxtv kurdum ama burada daha cok secenek var Freetux tv görüntüleyicisi VLC imiş yani buradan referans alıp kanal değişim işlemini yapaiblir miyiz ?

diğer seçenekler

http://ubuntuhandbook.org/index.php/2013/08/watch-live-tv-on-ubuntu/


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 20 Nisan 2014 - 11:42:28

ve hocam suan bu komutla Türkçe kanalları alabiliyorum 

vlc -vvv https://dl.dropbox.com/s/7jmc8r66r0ci7wz/TV_decent.m3u?dl=1

Kaanx

VLC komut setleri ile alaklı söyle bir sayfa buldum fakat C kodu olarak ekleyemedim kendi kodumun içine

http://n0tablog.wordpress.com/2009/02/09/controlling-vlc-via-rc-remote-control-interface-using-a-unix-domain-socket-and-no-programming/

https://wiki.videolan.org/Documentation:Advanced_Use_of_VLC/


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 22 Nisan 2014 - 10:57:48

Güncel --

Kaanx

Merhaba ;

Vlc player IP tv yapmaya calısıyorum ve C ile bir kontrol kısımı olusturmam gerekiyor. Play Stop Next Back Volume Up Volume Down işlemlerini yapıcam. Basit Libvlc tutorial inceledim fakat bişi cıkaramadım ortaya sadce bell bir süre mp3 çaldım. Ben olsutrudgum m3u file dan Video stream almam gerek. Referans link olarak sizde inceleyebilirsiniz yardımlarınızı bekliyorum.

https://wiki.videolan.org/LibVLC_Tutorial


Kaanx

VLC bash script için yazılmıs kodlar bunu C kodu içinde nasıl kullanabilirim ?

https://wiki.videolan.org/How_to_Use_Lirc/

Kaanx

VLC bash script için yazılmıs kodlar bunu C kodu içinde nasıl kullanabilirim ?

https://wiki.videolan.org/How_to_Use_Lirc/

https://wiki.videolan.org/How_to_use_VLC_for_transcription_in_linux/

http://stackoverflow.com/questions/8943464/linux-shell-vlc-programming

http://www.videolan.org/doc/play-howto/en/ch04.html



Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 23 Nisan 2014 - 16:28:05

Hocam GTK ile yapılmıs vlc tabanlı bir mp3 calma arayüzü acaba bu daha mantıklı mı olur ?


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 23 Nisan 2014 - 16:39:56

https://github.com/cmassiot/vlc-broadcast/blob/master/doc/libvlc/gtk_player.c


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 23 Nisan 2014 - 18:45:04

Hocam olayın patladıgı yer olarak dusunuyorum burayıda suan path belirtip mp3 caldırıp durdurabiliyorum :)

http://www.videolan.org/developers/vlc/doc/doxygen/html/group__libvlc__media__player.html

ve referans örnek

https://wiki.videolan.org/LibVLC_Tutorial/


sem

https://forum.ubuntu-tr.net/index.php?topic=43116.msg504231#new

Bu iki başlık aynı konuya hizmet veriyor. Bu başlıklardaki sorunlar karışacak birbirine.  Forum yetkililerinden iki konuyu birleştirmelerini talep edelim.

Öncelikle şuna karar vermek gerek, bash komutları ile VLC'yi yönecek bir C sarmalama (wrapper) programı yazacaksınız yoksa doğrudan C API'lerini kullanarak yeni bir uygulama mı çıkartacaksınız. Ekran üzerinde oynama yapma açısından BASH komutu çok anlamlı olmayabilir sizin durumunuz için.

Çünkü o zaman stram ile görüntüye çevirdiğiniz VLC ekranını uygulamanız içerisine gömemeyebilirsiniz ya da çok fazla uğraştırabilir. Bu nedenle doğrudan API kullanarak bu işi yapmak en iyi çözüm olacak gibi görünüyor sizin için.

Zaten bu konulara da göz atmışsınız, verdiğiniz;

https://github.com/cmassiot/vlc-broadcast/blob/master/doc/libvlc/gtk_player.c

bağlantısından yola çıkarak söylüyorum bunu.

Ben de biraz bakındığımda bunun QT ile yapıldığını gördüm ve kodları inceledim biraz. Hem C++ dersi alıyordunuz =), QT'a dönmek isterseniz URL'i paylaşıyorum;

http://derekmolloy.ie/custom-video-streaming-player-using-libvlc-and-qt/

Ama, yok hayır ben GTK ile çalışmak istiyorum derseniz, zaten tüm gerekli bileşenler sizin verdiğiniz URL'lerde mevcut. Ben tabi sadece sonuca odaklandım, yani uygulamayı yazmak yerine =) size yol göstermesi açısından salt sonuca en kısa zamanda gitmeye yöneldim. Ve gidebildim =)

Şöyle gittim;

https://github.com/cmassiot/vlc-broadcast/blob/master/doc/libvlc/gtk_player.c

Bu  URL'deki örnekten yola çıkıyoruz. Burada uygulamayı derlediğimizde, bir dosya seçiyoruz ve Play dediğimizde bunu çalmaya başlıyor.


g_signal_connect(filemenu_openitem, "activate", G_CALLBACK(on_open), window);


satırından, menü nesnesinin, on_open call back fonksiyonuna bağlandığını görebiliyoruz. Hemen on_open'a gidiyoruz;


void on_open(GtkWidget *widget, gpointer data) {
    GtkWidget *dialog;
    dialog = gtk_file_chooser_dialog_new("Choose Media", data, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL);
    if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
        char *uri;
        uri = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(dialog));
        open_media(uri);  // BİZİM SATIR BURASI
        g_free(uri);
    }
    gtk_widget_destroy(dialog);
}


Biz, bir dosyayı ne şekilde açabildiğini merak ediyoruz, mp3 böyle açılıyorsa, video da ya böyle ya da benzeri şekilde açılacak demektir. // BİZİM SATIR BURASI yazdığım satırdan, dosyayı açmak için kullanılan fonksiyonu görüyoru. Yeni hedef open_media()


void open_media(const char* uri) {
    libvlc_media_t *media;
    media = libvlc_media_new_location(vlc_inst, uri);
    libvlc_media_player_set_media(media_player, media);
    play();
    libvlc_media_release(media);
}


on_open() fonksiyonundan çağrılmıştı bu fonksiyon ve parametre olara, dosya seçiciden alınan dosya yolu (path) gönderilmişti. Dosya yolunun nerede kullanıldığına bakıyoruz, stream bu dosya yolu ile ilişkilendirilmeli bir yerde.


media = libvlc_media_new_location(vlc_inst, uri);


Satırı hemen dikkat çekiyor, parametre ismi olan uri, burada kullanılıyor.

Burada dikkatimizi çekmesi gereken en önemli husus, parametre ismine, kodu yazan kişinin URI yazmış olması. Buradan hemen diyoruz ki "file//" alabiliyorsa "http//" ya da farklı bir protokol neden almasın? =) 

Hemen Google'a soruyoruz ve ilgili fonksiyonun referansına gidiyoruz;

Ve bu bağlantıyı buluyoruz

Dikkatimizi hemen şu ibare çekiyor;

Alıntı YapCreate a media with a certain given media resource location, for instance a valid URL.
O zaman test ediyoruz hemen bu ibareyi. Önce bir tane IPTV test yayını bulmak gerekli. Bu benim için en zoru oldu ama sonunda buldum bir tane. Rastgele, çalışan ilkini koydum kodların içerisine. Bu nedenle açılan kanalın benimle ya da forum ile ya da herhangi hiç bir şey ile ilgilisi yoktur. Sadece çalışan ve akım okunabilen bir IP TV adresidir, o kadar. Haber gibi böyle ciddi şeyler gördüm de açılınca hani politik bir şeyse önceden haber vereyim istedim.

Test için yukarıdaki kodu revize etmemiz yeterli. Ben Play tuşuna basınca, istediğim IP'yi açmaya çalışacak şekilde revize ettim kodu. Yani kod içerisinde yaptığım tek değişiklik on_playpause() fonksiyonunda oldu. Kodu derleyip çalıştırabilirsiniz, eğer IP'de sorun olursa ilgili fonksiyonda gönderilen (sabit, jardondaki tabir ile hardcoded) IP adresini çalıştığından emin olduğunuz bir tanesi ile değiştirip, kodu tekrar derleyiniz.


// gcc -o gtk_player gtk_player.c `pkg-config --libs gtk+-2.0 libvlc` `pkg-config --cflags gtk+-2.0 libvlc`
/* License WTFPL http://sam.zoy.org/wtfpl/ */
/* Written by Vincent Schüßler */
#include <stdlib.h>
#include <gtk/gtk.h>
#include <gdk/gdkx.h>
#include <vlc/vlc.h>
#define BORDER_WIDTH 6
void destroy(GtkWidget *widget, gpointer data);
void player_widget_on_realize(GtkWidget *widget, gpointer data);
void on_open(GtkWidget *widget, gpointer data);
void open_media(const char* uri);
void play(void);
void pause_player(void);
void on_playpause(GtkWidget *widget, gpointer data);
void on_stop(GtkWidget *widget, gpointer data);
libvlc_media_player_t *media_player;
libvlc_instance_t *vlc_inst;
GtkWidget *playpause_button;
void destroy(GtkWidget *widget, gpointer data) {
    gtk_main_quit();
}
void player_widget_on_realize(GtkWidget *widget, gpointer data) {
    libvlc_media_player_set_xwindow(media_player, GDK_WINDOW_XID(gtk_widget_get_window(widget)));
}
void on_open(GtkWidget *widget, gpointer data) {
    GtkWidget *dialog;
    dialog = gtk_file_chooser_dialog_new("Choose Media", data, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL);
    if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
        char *uri;
        uri = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(dialog));
        open_media(uri);
        g_free(uri);
    }
    gtk_widget_destroy(dialog);
}
void open_media(const char* uri) {
    libvlc_media_t *media;
    media = libvlc_media_new_location(vlc_inst, uri);
    libvlc_media_player_set_media(media_player, media);
    play();
    libvlc_media_release(media);
}
void on_playpause(GtkWidget *widget, gpointer data) {
/*
    if(libvlc_media_player_is_playing(media_player) == 1) {
        pause_player();
    }
    else {
        play();
    }
*/
    open_media("http://livede.gostream.nl/ulketv/ulketv/playlist.m3u8");
}
void on_stop(GtkWidget *widget, gpointer data) {
    pause_player();
    libvlc_media_player_stop(media_player);
}
void play(void) {
    libvlc_media_player_play(media_player);
    gtk_button_set_label(GTK_BUTTON(playpause_button), "gtk-media-pause");
}
void pause_player(void) {
    libvlc_media_player_pause(media_player);
    gtk_button_set_label(GTK_BUTTON(playpause_button), "gtk-media-play");
}
int main( int argc, char *argv[] ) {
    GtkWidget *window,
              *vbox,
              *menubar,
              *filemenu,
              *fileitem,
              *filemenu_openitem,
              *player_widget,
              *hbuttonbox,
              *stop_button;
    
    gtk_init (&argc, &argv);
    // setup window
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_default_size(GTK_WINDOW(window), 400, 300);
    g_signal_connect(window, "destroy", G_CALLBACK(destroy), NULL);
    gtk_container_set_border_width (GTK_CONTAINER (window), 0);
    gtk_window_set_title(GTK_WINDOW(window), "GTK+ libVLC Demo");
    //setup vbox
    vbox = gtk_vbox_new(FALSE, 0);
    gtk_container_add(GTK_CONTAINER(window), vbox);
    //setup menu
    menubar = gtk_menu_bar_new();
    filemenu = gtk_menu_new();
    fileitem = gtk_menu_item_new_with_label ("File");
    filemenu_openitem = gtk_menu_item_new_with_label("Open");
    gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), filemenu_openitem);
    gtk_menu_item_set_submenu(GTK_MENU_ITEM(fileitem), filemenu);
    gtk_menu_bar_append(GTK_MENU_BAR(menubar), fileitem);
    gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0);
    g_signal_connect(filemenu_openitem, "activate", G_CALLBACK(on_open), window);
    //setup player widget
    player_widget = gtk_drawing_area_new();
    gtk_box_pack_start(GTK_BOX(vbox), player_widget, TRUE, TRUE, 0);
    //setup controls
    //playpause_button = gtk_button_new_from_stock(GTK_STOCK_MEDIA_PLAY);
    playpause_button = gtk_button_new_with_label("gtk-media-play");
    gtk_button_set_use_stock(GTK_BUTTON(playpause_button), TRUE);
    stop_button = gtk_button_new_from_stock(GTK_STOCK_MEDIA_STOP);
    g_signal_connect(playpause_button, "clicked", G_CALLBACK(on_playpause), NULL);
    g_signal_connect(stop_button, "clicked", G_CALLBACK(on_stop), NULL);
    hbuttonbox = gtk_hbutton_box_new();
    gtk_container_set_border_width(GTK_CONTAINER(hbuttonbox), BORDER_WIDTH);
    gtk_button_box_set_layout(GTK_BUTTON_BOX(hbuttonbox), GTK_BUTTONBOX_START);
    gtk_box_pack_start(GTK_BOX(hbuttonbox), playpause_button, FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(hbuttonbox), stop_button, FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(vbox), hbuttonbox, FALSE, FALSE, 0);
    //setup vlc
    vlc_inst = libvlc_new(0, NULL);
    media_player = libvlc_media_player_new(vlc_inst);
    g_signal_connect(G_OBJECT(player_widget), "realize", G_CALLBACK(player_widget_on_realize), NULL);
    gtk_widget_show_all(window);
    gtk_main ();
    libvlc_media_player_release(media_player);
    libvlc_release(vlc_inst);
    return 0;
}


Kodu derlemek için gereken kodu, yazan kişi çok akıllıca bir hareketle ilk satıra koymuş. derleyip çalıştırdıktan sonra Play tuşuna basmanız yeterli.

Ve arayüzü istediğiniz gibi değiştirebilirsiniz.

Bu araştırmalarım sonucunda alt yapıyı da öğrenmiş oldum. Bundan sonra yapmanız gereken şu;

* Öncelikle arayüzü istediğiniz gibi bir düzene getirin.
* Kanal değiştirme işlemi görünen o ki IP değiştirme anlamına geliyor. Kanalları kullanıcıya bir liste görünümü ile sunup, kullanıcı listeden kanal değiştirdikte, mevcut yürütülen stream için stop buttonunun işlemini uygulayıp, yeni bir stream açmak. Kanal değiştirme bu anlama geliyor.
* Boyutlandırmada da sorun görünmüyor, bu kod ile boyutlandırmayı denedim.

Yani gerisi artık sizin hayal gücünüze kalmış aslında, maddelemeye gerek yok sanırım ama tek şunu belirtmiş olayım, aslında ilk yapmanız gereken bu kodların lisans durumunu araştırmak olabilir. 

İyi çalışmalar, kolay gelsin.
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

Kaanx

Anlatımınız için ve değerli vaktinizi bana ayırdıgınız ayrıca tesekkur ediyorum hocam GTK ile bu işlemi yapıyorsak benim OPENCV kodumla birleştirmek işi var sırada :) daha önce gönderdiğim kontrol panelim söyle ;



Burada yaptıgım Color detection kısmı ve yapmıs oldugum detectiona göre komut verdirme satılarını söyle örnek vericek olursam ;


        CvPoint cvpoint = cvPoint(150,30); // location of the text
        if(posX < 90 && posY > 400) // clear
        {
           // lineColor = white; // white color works as eraser
            //cvPutText( frame, "Eraser selected.", cvpoint, &font, white );
            //sprintf (buffer, "Clearing the screen in %d",confirm_clear); // count-down for clearing the screen
           // cvPutText( frame, buffer, cvPoint(150,70), &font, red );
            //confirm_clear--;
            //if(confirm_clear < 0) // confirm in 10 frames before clearing
            //{
              //  confirm_clear = 20;
               // sprintf (buffer, "d0%d.jpg",image_num++);
               // cvSaveImage(buffer ,imgDrawing); // save the frame into an image
               // ClearScreen(imgScribble,imgDrawing);
               //cvPutText( frame, "Cleared the screen.", cvPoint(150,110), &font, white );
           // }
        }
        else if(posX > 540 && posY > 0 && posY < 115)  // PLAY
        {

           // lineColor = blue;
            cvPutText( frame, "PLAY TV", cvpoint, &font, blue );
           /* MultiThread Generating */

              err = pthread_create(&(tid[i]),NULL , &doSomeThing, NULL);
                if (err != 0)
                printf("\ncan't create thread :[%s]", strerror(err));
                 else
                printf("\n Thread created successfully\n");

                  i++;


                  /* play the media_player */
                    //  libvlc_media_player_play (mp);

        }

        else if(posX  > 540 && posY > 140 && posY < 230) // PAUSE
        {
            //lineColor = green;
            cvPutText( frame, "PAUSE TV.", cvpoint, &font, green );
            // stop playing
               libvlc_media_player_stop(mp);
        }

        else if(posX  > 540 && posY > 265 && posY < 365) //Forward Channel
        {
            //lineColor = red;
            cvPutText( frame, "FORWARD CHANNEL", cvpoint, &font, red );
            system("vlc --rc-unix= next");
        }

        else if(posX  > 540 && posY > 280 && posY < 480) //Backward Channel
        {
            //lineColor = red;
            cvPutText( frame, "BACKWARD CHANNEL.", cvpoint, &font, red );
        }

        else if(posX > 0 && posX  < 90 && posY > 0 && posY < 120) // exit
        {
        pthread_cancel(tid[0] && tid[1] && tid[2]);


        //system("vlc://quit"); // Quit for VLC
            sprintf (buffer, "EXITING in %d",confirm_close);
            cvPutText( frame, buffer, cvpoint, &font, red );
            confirm_close--;
            if(confirm_close < 0) // confirm in 10 frames before exit

                break;
        }
        else if(posX < 120 && posY > 130 && posY < 205) // Volume Control
        {
            //lineThickness = 6 - ( posY/60-1 );  // change the thickness of line from 1 - 5 based on posY

            system("amixer -D pulse sset Master 5%+");
            cvPutText( frame, "Ses Seviyesi %d", cvpoint, &font, blue );


        }
        else if(posX < 120 && posY > 245 && posY < 350){

        system("amixer -D pulse sset Master 5%-");
        cvPutText( frame, "Ses Seviyesi %d", cvpoint, &font, blue );
        }
        else if(posX < 120 && posY > 400 && posY < 480){

                system("amixer -D pulse sset Master 0%");
                cvPutText( frame, "MUTE", cvpoint, &font, blue );
               }


İşlerimi burada yaptırıyorum yani butona play stop ileri geri hareketlerimi bu kısımdaki kontrol döngüleri ile gerçekliyorum Sanırım bizim GTK kodumuzun button kodlarını buraya sıgdırma işlemi olucak sırada ki işlemlerimiz :) Bunu sağlayamaya çalısıcam verdiğiniz kodu henüz denemedim ama kanal değişimi sağlıyor mu ? hocam benim gtk playeri yapmam da sdaece play stop seceneği vardı diye hatırlıyorum yani o kodun orjinal halinde ?

sem

Video ve mp3 çalabiliyoruz mp3'ten.

bash ile ses düzenini yapabiliyoruz.

API içerisinde şarkı değiştirme de mevcut =)

Bu başlığı kapatabiliriz sanıyorum.

Şu an sorun iki farklı kodun birleşmesi mi? Bununla ilgili yeni bir başlık ile devam edelim. Neyi nerede çözdüğümüzü geri dönüp aradığımızda bulabiliriz böylece kolayca.

Dediğiniz iki buton var uygulamada Play ve Stop butonları. Play'e basınca IP'den yayın yapmaya başlıyor. IP'den stream'i okuma örneği olarak paylaştım.

İyi çalışmalar.
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

Kaanx

Hocam verdiğiniz kodu çalıstırdım play ve stop işlemlerini yapabiliyorum evet. Ama kanal değiştrime yapamıyorum mesela ondan bahsetmiştim ben. Ben sizin verdiğiniz bu kodu kendi Opencv ile yazdıgım kod içerisine modifiye edicem play ve stop yapabiliyor hale getiricem. Fakat ileri geri kanal değişimi ve dediğiniz gibi ses değişimi yapmam gerekmekte. API dökümanlarından ben pek bişi anlamadım acıkcası :) Fakat emeğinize sağlık siz anlatınca gayet hakim oldum konuya yani su duruma kadar :)

Benim yapıcaklarım ;

Yukarda verdiğim panelde play ve stop iconlarına sizin gtk player üzerindeki play stop düğmelerinin işini yaptırıcam.
Eğer yardımcı olursanız kanal değişimi ve ses özelliklerinide eklicem yukarıda verdiğim kodda kontrol döngülerinin içinde neleri kontrol etmek istediğim yazıyor aslında uygun yerlere işleri yaptırcak kodları eklicem hocam. :)

sem

Şöyle gidelim;

GTK Varken OpenCV'ye neden ihtiyaç duyuyorduk tam olarak?
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

Kaanx

hocam opencv ile webcamdan el tanıma yapıyorum ve  yukarıda verdiğim panelde bunun için kullanıyorum :)



söyle ornek vereyim hocam :)

sem

Kullanıcının bastığı buttonları kameradan tanıma zorunluluğu var mıdır? Bu buttonlar button olarak GTK+ ile kolaylıkla yapılabilir gibi duruyor çünkü o nedenle soruyorum. Mesela GTK+ ile bir button yapıp, en sol üstteki konuma getirip, açma kapama görselini buttona koyup, kullanıcı bu buttona bastığında kapatma işlemi yapılabilir.

Burada amaç, ekran dokunmatik değilken de, jullanıcı ekranda bu lokasyona tıkladığında kapatmak mı? Yani dokunmatik olmayan bir ekranda kullanıcının bastığı lokasyonu ayırt edebilme, doğru mudur?
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

Kaanx

evet var hocam mesela ben sizin verdiğiniz örnekde oynat dediğimde stream acılıyor ya tv akısı geliyor. O ekranda ki Play kısmına elimi getirdğimde stream akısı olmalı. Mouse yokmus gibi düşünelim bunu :) biz mouse yada klavye ile yaptıgımızı elimizi tanıyarak kameradan , komutları vericez.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 26 Nisan 2014 - 00:27:12

yani söyle diyim ben size mesela

if(Play tusu el tanıma bölgesi ==1){

GTK'daki oynat tusuna basılmış gibi olsun ve stream başlasın();
}

if(stop tusu el tanıma bölgesi ==1){

GTK'daki sto tusuna basılmış gibi olsun ve stream dursun();
}

gibi olucak hocam Hand Control yani mouse klavye yok Yeni nesil smartTV ve ya Xbox gibi düsünebilirsiniz :)

sem

SmartTV'yi bilmiyorum maalesef, evimde eski bir televizyon var sadece DVD oynatıcıdan film izleyeceğim zaman kullanıyorum, televizyon işlevini kullanmıyorum. XBox ile de oynama şansım/fırsatım/zamanım olmadı maalesef =)

Ben aslında fare yok gibi düşünüyordum fakat ekranı dokunmatik olarak düşünüyordum. =)

OpenCV ile bu nasıl yapılır emin değilim. En önemlisi ise GTK ile OpenCV nasıl harmanlanır bu konuda da fikrim yok maalesef. OpenCV ile ilgili bir kaç makale okumak dışında hiç ilgilenmedim =) Bu nedenle sorun yaşıyorum sanırım bu konuda =)

OpenCV'de yalnız bırakacağım gibi sizi. =) Ne durumdasınız şu an OpenCV konusunda?
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

Kaanx

Opencv kodları hazır suan ben Sarı renk algımala yapıyorum ve bundan önceki konusmalarımızda verdiğim kod örneği aslında o panelde ki algılama yaptıgım yerlerın piksel değerleri idi yani  yukarıda yazdıgım örnekteki gibi olusturdugum kontrol döngüleri içine sdaece GTK kodlarını yani play stop ileri geri ses aç ses kıs işlemleri eklenmesi kaldı. Çok şükür OpenCV kısmı halloldu orası bende :)

sem

http://www.videolan.org/developers/vlc/doc/doxygen/html/group__libvlc__audio.html#ga56911e6b6cd4878796277c19203302a3

Ses işlemleri için yukarıdaki fonksiyonu kullanmak gerekiyor libvlc tarafında.

Önceki yaptığım örnekle ilgili araştırma yaparken anladığım kadarı ile sadece yukarıdaki kodu geliştirmeniz yeterli, çünkü kanal değiştirme IP değiştirme ile aynı. Desteklediğiniz IP'leri kullanıcıya bir liste olarak sunmanız gerek. Daha sonra kullanıcı birisini tıkladığında yukarıdaki örnek için Play buttonuna basıldıktan sonraki işlemleri gerçeklemek gerekli. Daha sonra farklı bir ipye tıklandığında stop'ta yapılan işlemleri yapıp, yeni IP içi Play işlemini tekrar gerçeklemeniz gerekli.

Bunları zaten yaparsınız, örnek kod var çünkü elinizde. Bence asıl soru şu; openCV ile dışarıdan bir buttonu nasıl tıklayacaksınız, derken bir bakınayım dedim, onun da örnek kodu varmış =)

http://opencv-srf.blogspot.com.tr/2011/11/mouse-events.html

Ben sizin yerinizde olsam şeffaf GTK buttonları koyardım gerekli yerlere. Yukarıdaki kodu da tıklama için kullanıp, görünmeyen butonu tetiklerdim. Böylece openCV sadece ekranda kullanıcının elini götürdüğü yeri tespit etmek için ve akabinde bu bölümde bulunan şeffaf GTK buttonuna tıklamak için kullanılmış olacak. VLC ile ilgili tüm işlemleri GTK'ya yıkmış olacaksınız.

Hatta şöyle bir senaryo da uygun olabilir, openCV'yi de C/C++ ile kodluyorsanız GTK+'yı egale ederek, VLC'yi openCV bileşenleri içerisine gömmeyi deneyebilirsiniz. Böylece uğraşmanız gereken sadece iki şey olur; libvlc ve openCV.
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

Kaanx

Hocam benim olayım mouse işini ortadan kaldırmak cunku sagtık sol tık olayı kafa karısıtrıcı ve Opencv kısmıdna kafa yorucu geldi bana ben renk tanıma yaparak o bölge bir phase olusturup işlem yaptırıyorum. Mesela bu örnekte LEd yakıp söndürmüşler

http://www.youtube.com/watch?v=4wKf3OTJlfw

Bende aynı mantıktan yola cıkarak diyorum ki GTK da benim tıkladıgım yerler var ya o tıklama yaprıtıgım butonların görevlerini yukarıda payşlatğığm panel üzerinde yapayım . Mouse detect işimi uzattıgı için onu tercih etmemiştim :) Çünkü ben webam üzerinden sürekli kayıt alıyorum ve ona göre işlem yaptırıyorum. Mesela orada led yak led söndür işlemleri var ya ben orada gtk da play stop yapıcam. Onun gibi 2 tane eklersek onlarada kanal değişmini yaptıorma olayını yüklersem olay çözülür diye dusunuyorum Sizcede bu daha basit olmaz mı ?

sem

Her ihtimalde OpenCV ile GTK'yı konuşturmanız gerekecek. OpenCV tarafında farz edelimki her şey tamamladınız, kullanıcı bir yere elini götürünce bunu algılayabiliyor ve koordinatlara göre hangi işlemi yapmak istediğini tespit edebiliyorsunuz; kanal değiştir, sesi kıs vs.

Bunu openCV ile GTK'ya bildirmeniz gerekli. Process'ler arası haberleşmeden ziyade ya OpenCV içerisinde GTK ya da GTK içerisinde OpenCV kullanmanız en uygunu olacaktır.
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?