我正在尝试修改HLS段传输流,并使用ffmpeg保留其开始时间.但是,即使提到了-copyts,输出也不会保留输入文件的start_time值.这是我的命令行:
ffmpeg -i fileSequence1.ts -i x.png -filter_complex '[0:v][1:v]overlay[out]' -map '[out]' -map 0:1 -acodec copy -vsync 0 -vcodec libx264 -streamid 0:257 -streamid 1:258 -copyts -profile:v baseline -level 3 output.ts
Run Code Online (Sandbox Code Playgroud)
start_time值始终延迟约2秒.
/Users/macadmin/>ffmpeg -y -v verbose -i fileSequence0.ts -map 0:0 -vcodec libx264 -copyts -vsync 0 -async 0 output.ts
ffmpeg version 2.5.3 Copyright (c) 2000-2015 the FFmpeg developers
built on Mar 29 2015 21:31:57 with Apple LLVM version 6.0 (clang-600.0.54) (based on LLVM 3.5svn)
configuration: --prefix=/usr/local/Cellar/ffmpeg/2.5.3 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= …Run Code Online (Sandbox Code Playgroud) 我试图从f#调用这个函数
功能签名是:
CloudStorageAccount.SetConfigurationSettingPublisher
(Action<string, Func<string, bool>>) : unit
Run Code Online (Sandbox Code Playgroud)
C#调用是这样的:
CloudStorageAccount.SetConfigurationSettingPublisher((configName,
configSettingPublisher) =>
{
string configValue = "something"
configSettingPublisher(configValue);
});
Run Code Online (Sandbox Code Playgroud)
而在F#中,我必须做这样的事情:
let myPublisher configName (setter:Func<string, bool>) =
let configValue = RoleEnvironment.GetConfigurationSettingValue(configName)
setter.Invoke(configName) |> ignore
let act = new Action<string, Func<string, bool>>(myPublisher)
CloudStorageAccount.SetConfigurationSettingPublisher(act)
Run Code Online (Sandbox Code Playgroud)
这可以在f#中更简洁地写出来吗?
我正在使用 Filehelpers 读取一个简单的 CSV 文件 - 该文件只是一个键值对。(字符串,int64)
我为此编写的 f# 类型是:
type MapVal (key:string, value:int64) =
new()= MapVal("",0L)
member x.Key = key
member x.Value = value
Run Code Online (Sandbox Code Playgroud)
我在这里遗漏了一些基本的东西,但 FileHelpers 总是假设字段的顺序与我指定的顺序相反 - 如值、键。
let dfe = new DelimitedFileEngine(typeof<MapVal>)
let recs = dfe.ReadFile(@"D:\e.dat")
recs |> Seq.length
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么?
我有一个接受Stream的功能.我的数据位于一个大型列表中,运行数百万个项目.
有没有一种简单的方法可以在Stream中包装一个序列,在流中返回我的序列块?一种显而易见的方法是实现我自己的流类,它返回序列的块.就像是 :
type SeqStream(sequence:seq<'a>) =
inherit Stream()
default x.Read(buf, offset, count) =
// get next chunk
// yield chunk
Run Code Online (Sandbox Code Playgroud)
有没有更简单的方法呢?我没有办法改变接受流的目标函数.
我正在尝试向Seq模块添加一些额外的聚合函数.我在看这里列出的一些函数的实现:
https://github.com/fsharp/fsharp/blob/master/src/fsharp/FSharp.Core/seq.fs
其中一个免责声明是"该函数返回一个序列,一旦该序列被迭代,就会消化整个初始序列.因此,该函数不应该用于大序列或无限序列." 许多功能都是如此,例如GroupBy.
第一个问题:是否有方法可以编写可以有效处理大型序列的聚合函数?我知道"大"是主观的; 我只是在寻找编写这些函数的一般模式.
第二个问题:我如何确保像Dictionary这样的集合(在集合函数中定义)被有效地垃圾收集?我理解字典应该在超出范围时收集,但有没有办法明确表明?鉴于字典的范围是保留在函数内,我不能在那上面调用.Clear()吗?