小编Dom*_*mra的帖子

HLS'EVENT'播放列表未能在播放器中启动

我有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 =

video-streaming http-live-streaming ios

23
推荐指数
2
解决办法
2016
查看次数

C#和FFmpeg最好没有shell命令?

我希望能够使用FFmpeg从我的C#程序中转换视频文件.我知道我可以调用一个shell命令,但是有更好的方法吗?

通过shell调用命令的问题是,我不确定你可以做进度条等事情......或者你可以吗?

如果没有办法,任何人都可以建议布局一些框架来执行shell命令的最佳方法.传递一根长长的绳子非常麻烦.

c# ffmpeg

19
推荐指数
2
解决办法
2万
查看次数

基本的Scala OOP问题 - 通过引用传递?

我有点难过这个问题是多么愚蠢而且有严重的思维空白,但我想我还是会问.

我有一个对象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)

如果没有,我该如何做到这一点?

oop scala

18
推荐指数
3
解决办法
1万
查看次数

Scala - 类型示例.如何解释好处?

所以我向同事/朋友展示了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)

functional-programming scala typeclass

18
推荐指数
1
解决办法
1174
查看次数

在Python中操作二进制数据

我打开一个像这样的二进制文件:

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冻结,并发出哔哔声(我认为那里有一个二进制哔声代码).如何安全地使用这些数据?如何将每个十六进制数转换为十进制?

python binary hex python-2.7

16
推荐指数
1
解决办法
3万
查看次数

Scala - 与条件语句匹配的模式?

有可能做这样的事情:

def foo(x: Int): Boolean = {
    case x > 1 => true
    case x < 1 => false
}
Run Code Online (Sandbox Code Playgroud)

scala pattern-matching

16
推荐指数
1
解决办法
1万
查看次数

Scala - 复杂条件模式匹配

我有一个我要表达的声明,在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模式匹配语法是一种很好的方法吗?

scala pattern-matching

16
推荐指数
1
解决办法
2万
查看次数

向非程序员解释抽象

抽象是一个似乎难以解释的概念,而不回复使用编程术语.我已经考虑了很多,但我无法得出满意的答案.有没有人有任何非常一般但非常相关的解释?

隐喻,similes等都是受欢迎的.

abstraction programming-languages

12
推荐指数
3
解决办法
5585
查看次数

Java 8的Optional,Scala的选项和Haskell的Maybe之间的主要区别是什么?

我已经阅读了几篇关于Java 8即将推出的Optional类型的帖子,我试图理解为什么人们一直认为它不像Scala的Option那么强大.据我所知,它有:

  • 高阶函数,如使用Java 8 lambda的map和filter.
  • Monadic flatMap
  • 通过getOrElse类型函数短路.

我错过了什么?

java haskell scala

12
推荐指数
2
解决办法
1710
查看次数

物联网请求响应协议

我们需要构建一个可以与运行Android变体的某些嵌入式设备通信的服务器.我们需要能够向设备发送命令,并接收响应.一个简单的命令可能是询问设备的状态.我们不会有HTTP,所以我们需要让客户端/设备与服务器建立连接.

我们正在考虑使用MQTT,因为它具有许多不错的属性(QoS,轻量级,为物联网构建),但它本身不支持请求响应工作流.

我们已经考虑过在MQTT之上构建RPC,但在我们开始之前,我只是想让人们对此问题有所了解.Websockets,WAMP,ZeroMQ会更好吗?


编辑:

Q1: 我们甚至需要RPC吗?

Q2: 有没有一种方法来构建系统,我总是发送异步类型的消息,仍然提供良好的用户体验?

Q3: 任何例子?

寻找实施示例并亲身体验使用单个设备构建物联网通信系统的经验.

parallel-processing android low-latency mqtt iot

12
推荐指数
2
解决办法
1559
查看次数