Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 如何在套接字中接收vlc流?_Sockets_Tcl_Vlc - Fatal编程技术网

Sockets 如何在套接字中接收vlc流?

Sockets 如何在套接字中接收vlc流?,sockets,tcl,vlc,Sockets,Tcl,Vlc,我正在用tcl开发一个流媒体应用程序。 我有一个vlc服务器,它以http模式广播流。我要做的是开发一个客户端,它将尝试使用特定的ip地址和端口号连接到服务器,然后尝试将流保存在文件中。 我使用的代码很简单: set server localhost set sockChan [socket $server 1234] set line [read $sockChan 1000] puts " vidéo: $line" close $sockChan 当我试着测试我的脚本时,我发现我意识到了

我正在用tcl开发一个流媒体应用程序。 我有一个vlc服务器,它以http模式广播流。我要做的是开发一个客户端,它将尝试使用特定的ip地址和端口号连接到服务器,然后尝试将流保存在文件中。 我使用的代码很简单:

set server localhost
set sockChan [socket $server 1234]
set line [read $sockChan 1000]
puts " vidéo: $line"
close $sockChan
当我试着测试我的脚本时,我发现我意识到了其中的联系,但我无法读取流程! “puts”在控制台中不显示任何内容

你有什么想法吗!
谢谢。

由于您使用的是HTTP,我建议您查看TCL的绑定。

如果您只是想将URL的内容保存到文件中,标准包有一个
-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
):

请注意,代码很相似,但现在的顺序略有不同!如果您有Tcl 8.5,如果没有,为什么没有然后,您可以使用lambda应用程序,使代码的外观顺序更加相似:

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...

VLC可能是缓冲区。尝试读取1024字节(或1024的倍数)。我尝试了您的解决方案。。。我仍然有同样的问题…谢谢你它工作得很好。。。但是当脚本下载文件时,我无法访问相同的文件!事实上,我需要以http模式传输一个文件,然后转发给其他人!在这里,我不得不等待流媒体的结束。我需要的是按字节读取流,同时转发它!还有其他想法吗!你早该这么说的。如果您不想自己保留字节,但无法等待,请将
-command
传递到
geturl
,完成后将得到一个异步回调。同时,你可以做其他事情。我将用演示更新答案。
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...