как получить поток vlc в сокете? - PullRequest
0 голосов
/ 21 июля 2010

Я разрабатываю потоковое приложение с помощью tcl. У меня есть VLC сервер, который транслирует поток в режиме http. я пытаюсь разработать клиент, который будет пытаться подключиться к серверу с определенным IP-адресом и номером порта, а затем попытаться сохранить поток в файле. код, который я использую, прост:

set server localhost
set sockChan [socket $server 1234]
set line [read $sockChan 1000]
puts " vidéo: $line"
close $sockChan

проблема, когда я пытаюсь протестировать свой сценарий, я вижу, что осознаю соединение, но не могу прочитать поток! 'put' ничего не показывает в консоли ...

У тебя есть идеи? спасибо ..

Ответы [ 2 ]

2 голосов
/ 21 июля 2010

Если вы просто хотите сохранить содержимое URL-адреса в файл, стандартный пакет http имеет параметр -channel, который позволяет выполнять дамп напрямую.Например:

package require http
set f [open video.dump w]
fconfigure $f -translation binary
set tok [http::geturl "http://server:port/url" -channel $f]
close $f
if {[http::ncode $tok] != 200} {
    # failed somehow...
} else {
    # succeeded
}
http::cleanup $tok

Редактировать: Делать это асинхронно (требуется выполнение цикла событий, например, через vwait forever):

package require http
set f [open video.dump w]
fconfigure $f -translation binary
proc done {f tok} {
    close $f
    if {[http::ncode $tok] != 200} {
        # failed somehow...
    } else {
        # succeeded
    }
    http::cleanup $tok
}    
http::geturl "http://server:port/url" -channel $f -command "done $f"
# Your code runs here straight away...

Обратите внимание, что кодузнаваемо похожи, но теперь в несколько ином порядке!Если у вас есть Tcl 8.5 - если нет, то почему бы и нет?- тогда вы можете использовать лямбда-приложение, чтобы сделать видимый порядок кода еще более похожим:

package require http
set f [open video.dump w]
fconfigure $f -translation binary
http::geturl "http://server:port/url" -channel $f -command [list apply {{f tok} {
    close $f
    if {[http::ncode $tok] != 200} {
        # failed somehow...
    } else {
        # succeeded
    }
    http::cleanup $tok
}} $f]
# Your code runs here straight away...
0 голосов
/ 21 июля 2010

Поскольку вы работаете с HTTP, я бы посоветовал посмотреть привязки libcurl для TCL.

...