我有HLS播放列表,如下所示:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-PLAYLIST-TYPE:EVENT
#EXT-X-TARGETDURATION:10
#EXT-X-ALLOW-CACHE:NO
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:9.97667,
https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear1/fileSequence0.ts
#EXTINF:9.97667,
https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear1/fileSequence1.ts
#EXTINF:9.97667,
https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear1/fileSequence2.ts
#EXTINF:9.97667,
https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear1/fileSequence3.ts
Run Code Online (Sandbox Code Playgroud)
它们是EVENT类型的,意思是,当块变得可用时附加块,并且当所有块都存在时,#EXT-X-ENDLIST在末尾附加标记.
因此,当上传所有块时,我们最终得到一个类似于以下内容的播放列表:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-PLAYLIST-TYPE:EVENT
#EXT-X-TARGETDURATION:10
#EXT-X-ALLOW-CACHE:NO
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:9.97667,
https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear1/fileSequence0.ts
#EXTINF:9.97667,
https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear1/fileSequence1.ts
#EXTINF:9.97667,
https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear1/fileSequence2.ts
#EXTINF:9.97667,
https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear1/fileSequence3.ts
#EXTINF:9.97667,
https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear1/fileSequence4.ts
#EXTINF:9.97667,
https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear1/fileSequence5.ts
#EXT-X-ENDLIST
Run Code Online (Sandbox Code Playgroud)
我们在所有客户中都看到了奇怪的行为.如果您在iOS和Safari中打开m3u8播放列表,则在上传第一个块(或者甚至是3个块之后)时,播放器将开始播放视频.偶尔它会停止,但无法恢复.通常情况下,它甚至不会开始播放.
完全形成的播放列表(即带有#EXT-X-ENDLIST标签)完美播放.就在播放列表部分完成时.
我们尝试了各种各样的播放器:Quicktime,Safari,iOS,VLC,Flowplayer等.所有这些都有各种各样的问题,但这是最紧迫的.
任何洞察解决这个问题的方法都将非常感激.
编辑:我们尝试过HLS.js并且播放完美.这样一个不错的用户体验
编辑2:为了重现,我建议使用某种本地HTTP服务器(我使用python -m SimpleHTTPServer上面提供的播放列表.然后逐字地将文件附加到播放列表以模拟文件的上传,并观察播放器中断.
编辑3:好的,我已经构建了一个简单的测试工具来观察行为.https://github.com/dbousamra/m3u8-example运行node app.js然后open http://localhost:3001/playlist.m3u8在Safari或任何你想要的播放器中尝试.它应该可以播放,因为它是一个完整的播放列表.**
但是,如果添加一个查询参数?start=<some unix timestamp>,它将模拟事件的追加,每6秒一个块,从该时间戳开始,直到完成所有块,此时它将追加#EXT-X-ENDLIST一行.
示例网址: http://localhost:3001/playlist.m3u8?start=1460092250872
编辑5:我现在已经在Heroku上了解它:http://guarded-mesa-71212.herokuapp.com/playlist.m3u8?start =
我希望能够使用FFmpeg从我的C#程序中转换视频文件.我知道我可以调用一个shell命令,但是有更好的方法吗?
通过shell调用命令的问题是,我不确定你可以做进度条等事情......或者你可以吗?
如果没有办法,任何人都可以建议布局一些框架来执行shell命令的最佳方法.传递一根长长的绳子非常麻烦.
我有点难过这个问题是多么愚蠢而且有严重的思维空白,但我想我还是会问.
我有一个对象Foo,有几个字段.我想要一个可以更改其任何字段的方法,具体取决于作为参数传入的字段.像这样:
class Foo {
var x = 0
var y = 0
}
class Bar {
def changeFooField(field : Int) = {
field = 1
}
}
Run Code Online (Sandbox Code Playgroud)
我不能这样使用吗?:
changeFooField(foo.x)
Run Code Online (Sandbox Code Playgroud)
如果没有,我该如何做到这一点?
所以我向同事/朋友展示了Scala中类型类模式的一个例子.它看起来像这样:
case class Song(name: String, artist: String)
case class Address(street: String, number: Int)
trait LabelMaker[T] {
def output(t: T): String
}
object LabelMaker {
implicit object addressLabelMaker extends LabelMaker[Address] {
def output(address: Address) = {
address.number + " " + address.street + " street"
}
}
implicit object songLabelMaker extends LabelMaker[Song] {
def output(song: Song) = {
song.artist + " - " + song.name
}
}
def label[T : LabelMaker](t: T) = implicitly[LabelMaker[T]].output(t)
}
Run Code Online (Sandbox Code Playgroud)
哪个可以这样使用:
import LabelMaker._
println(label(new Song("Hey Ya", …Run Code Online (Sandbox Code Playgroud) 我打开一个像这样的二进制文件:
file = open("test/test.x", 'rb')
Run Code Online (Sandbox Code Playgroud)
并阅读列表中的行.每行看起来有点像:
'\xbe\x00\xc8d\xf8d\x08\xe4.\x07~\x03\x9e\x07\xbe\x03\xde\x07\xfe\n'
Run Code Online (Sandbox Code Playgroud)
我很难操纵这些数据.如果我尝试打印每一行,python冻结,并发出哔哔声(我认为那里有一个二进制哔声代码).如何安全地使用这些数据?如何将每个十六进制数转换为十进制?
有可能做这样的事情:
def foo(x: Int): Boolean = {
case x > 1 => true
case x < 1 => false
}
Run Code Online (Sandbox Code Playgroud) 我有一个我要表达的声明,在C伪代码中看起来像这样:
switch(foo):
case(1)
if(x > y) {
if (z == true)
doSomething()
}
else {
doSomethingElse()
}
return doSomethingElseEntirely()
case(2)
essentially more of the same
Run Code Online (Sandbox Code Playgroud)
使用scala模式匹配语法是一种很好的方法吗?
抽象是一个似乎难以解释的概念,而不回复使用编程术语.我已经考虑了很多,但我无法得出满意的答案.有没有人有任何非常一般但非常相关的解释?
隐喻,similes等都是受欢迎的.
我已经阅读了几篇关于Java 8即将推出的Optional类型的帖子,我试图理解为什么人们一直认为它不像Scala的Option那么强大.据我所知,它有:
我错过了什么?
我们需要构建一个可以与运行Android变体的某些嵌入式设备通信的服务器.我们需要能够向设备发送命令,并接收响应.一个简单的命令可能是询问设备的状态.我们不会有HTTP,所以我们需要让客户端/设备与服务器建立连接.
我们正在考虑使用MQTT,因为它具有许多不错的属性(QoS,轻量级,为物联网构建),但它本身不支持请求响应工作流.
我们已经考虑过在MQTT之上构建RPC,但在我们开始之前,我只是想让人们对此问题有所了解.Websockets,WAMP,ZeroMQ会更好吗?
编辑:
Q1: 我们甚至需要RPC吗?
Q2: 有没有一种方法来构建系统,我总是发送异步类型的消息,仍然提供良好的用户体验?
Q3: 任何例子?
寻找实施示例并亲身体验使用单个设备构建物联网通信系统的经验.