标签: stream

将 m3u8 流下载为 mp3

我有一个.m3u8链接,我正在尝试将其下载为.mp3文件。

import m3u8
import subprocess
import requests

link = 'https://cs9-9v4.vkuseraudio.net/s/v1/ac/NeMmHNX2Iyt08MZ4z5fELAMybgSNR6T1xYEcBEv5Kdsenci3KHOAC-1fKapAV9vxwVOBIik40I4DwfrN-a_jtjILYVcx3mLTNCzKo1UF-UhbKOztLrboF9NEn1jzZs1Jl0ijfmccog6aAcB4PcdnrxPzXY7WCMVWtUjWKOgHad5a-g0/index.m3u8'

m3u8_parsed = m3u8.load(link)

with open('track.ts', 'wb') as f:
  for segment in m3u8_parsed.segments:
    r = requests.get(segment.absolute_uri)
    f.write(r.content)

subprocess.run(['ffmpeg', '-i', 'track.ts', 'track.mp3'])
Run Code Online (Sandbox Code Playgroud)

结果是该track.ts文件占用了 6MB 存储空间,但当我尝试使用 VLC 播放器播放它时没有声音,而track.mp3基本上是一个占用几千字节的空文件。

python audio ffmpeg stream m3u8

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

Nodejs Transform中的push()和callback有什么区别

我正在实现一个由猫鼬光标进行管道传输的转换流(其工作方式类似于可读流,(或者可能是真正的可读流))

const myTransform = new Transform({
  readableObjectMode: true,
  writableObjectMode: true,
  transform(chunk: Document, encoding, callback) {
    this.push(chunk?.toObject() ?? null); // <- transforms data
    callback(); // <- calls callback
  },
});

MyMongooseModelWithHugeData.find()
  .cursor()
  .pipe(myTransform)
  .pipe(someWriteStream)
Run Code Online (Sandbox Code Playgroud)

是的。我当前的代码工作正常。

但我发现callback内部transform实现,接收第二个参数(显然看起来像经典的nodejs异步回调风格)。

所以,我改变了我的代码,如下所示,发现它也工作得很好。

const myTransform = new Transform({
  readableObjectMode: true,
  writableObjectMode: true,
  transform(chunk: Document, encoding, callback) {
    callback(null, chunk?.toObject() ?? null); // <- transforms data and calls callback.
  },
});
Run Code Online (Sandbox Code Playgroud)

我感到有些尴尬。我搜索了一些有关创建转换流的博客。我发现的所有文章都告诉我必须使用this.push()和调用callback()。但他们甚至没有提到 的第二个参数callback()

所以,我的问题是:

  • this.push()传递转换值时和传递转换值时有区别吗 …

javascript stream node.js nodejs-stream

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

1 个事务中的 Ecto 多个流

背景

PS:以下情况描述了一个假设场景,我拥有一家向客户销售产品的公司。

我有一个 Ecto 查询太大,我的机器无法处理它。返回数十亿个结果,世界上可能没有足够的 RAM 来处理它。

这里的解决方案(或者我的研究表明)是使用流。流是为可能无限的结果集而创建的,这适合我的用例。

https://hexdocs.pm/ecto/Ecto.Repo.html#c:stream/2

问题

因此,让我们想象一下,我想要删除购买给定商品的所有用户。也许那个东西在他们的国家并不真正合法,而现在我,这个 IT 行业的可怜人,必须解决问题,这样世界才不会崩溃。

天真的方式

item_id = "123asdasd123"

purchase_ids =
      Purchases
      |> where([p], p.item_id == ^item_id)
      |> select([p], p.id)
      |> Repo.all()

Users
    |> where([u], u.purchase_id in ^purchase_ids)
    |> Repo.delete_all()
Run Code Online (Sandbox Code Playgroud)

这是天真的方法。我称其为天真,因为有两个问题:

  • 我们购买的东西太多了,机器的内存会溢出(查看purchase_ids查询)
  • purchase_ids可能会有超过 100K 的 id,因此第二个查询(我们删除内容的地方)将会失败,因为它达到了 32K 的 Postgres 参数限制: https: //stackoverflow.com/a/42251312/1337392

我能说的是,我们的产品非常容易上瘾,而且价格非常优惠!我们的客户简直无法满足。不知道为什么。没有。我想不出任何理由。一个都没有。

考虑到这些问题,我无法帮助我的客户并发展我的帝国,我的意思是,小家庭拥有的企业。

我确实找到了这个可能的解决方案:

串流方式

item_id = "123asdasd123"

purchase_ids =
      Purchases
      |> where([p], p.item_id == ^item_id)
      |> select([p], p.id)

stream = Repo.stream(purchase_ids)

Repo.transacion(fn -> 
  ids = …
Run Code Online (Sandbox Code Playgroud)

stream elixir ecto

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

Rust Streams:如何将 TryStream&lt;Ok = Vec&lt;Item&gt;, Error = MyErrorType&gt;&gt; 转换为 TryStream&lt;Ok = Item, Error = MyErrorType&gt;

我正在使用板条箱玩 Rust 中的流futures-util

我正在创建一个流,该流在每个步骤中都从分页 API 请求新页面。每个页面的项目基本上都是一个向量。显而易见,每次调用服务器请求新页面都可能会失败。

我不想返回向量流,而是想返回一个项目流,当尝试从失败的页面获取项目时,该项目流会产生错误(并因此关闭该流)。

这是我当前的功能:

    pub fn search(
        &self,
        query: Query,
    ) -> impl TryStream<Ok = Vec<Item>, Error = MyError> {
        let initial_state = (query, None);
        stream::try_unfold(initial_state, |(query, page_token)| async move {
            let (items, next_page_token) = fetch_page(&query, page_token).await?;
            if items.len() <= 0 {
                Ok(None)
            } else {
                Ok(Some((items, (query, next_page_token))))
            }
        })
    }

Run Code Online (Sandbox Code Playgroud)

我想修改它,使返回类型为impl TryStream<Ok = Item, Error = MyError>

有可能吗?

asynchronous stream rust async-await

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

这是重载左流操作符的正确方法吗?(C++)

这个函数声明给了我错误:

ostream& operator<<(ostream& os, hand& obj);
Run Code Online (Sandbox Code Playgroud)

错误是:

error C2143: syntax error : missing ';' before '&'
error C4430: missing type specifier
error C2065: 'os' : undeclared identifier
error C2065: 'obj' : undeclared identifier
error C2275: 'hand' : illegal use of this type as an expression
    see declaration of 'hand'
error C4430: missing type specifier
Run Code Online (Sandbox Code Playgroud)

hand是我制作的一个类,display是一个类型的公共数据成员char*.

谁能告诉我我做错了什么?

c++ operator-overloading stream ostream

0
推荐指数
1
解决办法
1065
查看次数

PHP fseek()等价于变量?

我需要的是PHP的fseek()功能等价物.该函数适用于文件,但我有一个包含二进制数据的变量,我想对它进行处理.我知道我可以使用substr(),但那将是蹩脚的 - 它用于字符串,而不是二进制数据.此外,创建一个文件然后使用fseek()不是我想要的.

也许用流构建的东西?

编辑:好的,我差不多了:

$data = fopen('data://application/binary;binary,'.$bin,'rb');
Run Code Online (Sandbox Code Playgroud)

警告:无法打开流:rfc2397:非法参数

php variables fseek stream

0
推荐指数
1
解决办法
1211
查看次数

重定向C++ fstream

所以我有一个C++程序,通常在它执行时将事物写入日志文件.这是使用fstream完成的.但是,现在我想要包含关闭日志记录的功能.基本上,我的代码看起来像这样:

bool isLogging;
fstream* logFilePtr;
Run Code Online (Sandbox Code Playgroud)

在我的代码中,有一堆语句如:

(*logFilePtr) << "    Kernel call time in seconds: " << kTime << endl;
...
Run Code Online (Sandbox Code Playgroud)

现在,如果"isLogging"为真,我不希望这些打印.我可以用一堆if语句围绕它们,但我更喜欢比这更清洁的东西.我认为有一些方法可以采用C++流并将其重定向到"无",以便在使用<<运算符时,不会打印任何内容.

有谁知道如何重定向流,或有任何其他想法如何以优雅的方式处理这个?

谢谢,科林

c++ io fstream stream

0
推荐指数
1
解决办法
1782
查看次数

WCF服务与流响应

我有一个WCF服务,其中一个方法返回Stream.现在的问题是当我尝试使用Stream对象时,我是否尝试通过网络使用流或者客户端已经收到了自己的整个流?

如果我使用RESTful而不是WCF,它会有什么不同吗?

wcf stream

0
推荐指数
1
解决办法
2621
查看次数

需要帮助在C#中解析HTML

为了个人使用,我试图解析一个小的html页面,在简单的网格中显示法国足球锦标赛的结果.

var Url = "http://www.lfp.fr/mobile/ligue1/resultat.asp?code_jr_tr=J01";
WebResponse result = null;
WebRequest req = WebRequest.Create(Url);
result = req.GetResponse();
Stream ReceiveStream = result.GetResponseStream();
Encoding encode = System.Text.Encoding.GetEncoding(0);
StreamReader sr = new StreamReader(ReceiveStream, encode);

                while (sr.Read() != -1)
                {
                    Line = sr.ReadLine();
                    Line = Regex.Replace(Line, @"<(.|\n)*?>", " ");
                    Line = Line.Replace("&nbsp;", "");
                    Line = Line.TrimEnd();
                    Line = Line.TrimStart();
Run Code Online (Sandbox Code Playgroud)

然后我真的没有任何线索要么逐行采取,要么整个流采取一个,以及如何仅使用下一个数字作为得分来检索球队的名字.

最后,我想将两个团队的分数放在一个监听或xml中,以便将它与电话应用程序一起使用

如果有人有想法,那将是非常感谢!

html c# parsing stream

0
推荐指数
1
解决办法
1531
查看次数

自定义C++操纵器问题

我正在尝试在我的日志记录类中实现自己的流操纵器.它基本上是改变旗帜状态的终点操纵器.但是,当我尝试使用它时,我会得到:

ftypes.cpp:57: error: no match for ‘operator<<’ in ‘log->Log::debug() << log->Log::endl’
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/ostream.tcc:67: note: candidates are: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ostream<_CharT, _Traits>& (*)(std::basic_ostream<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/ostream.tcc:78: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ios<_CharT, _Traits>& (*)(std::basic_ios<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/ostream.tcc:90: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::ios_base& (*)(std::ios_base&)) [with _CharT = char, _Traits = std::char_traits<char>]
Run Code Online (Sandbox Code Playgroud)

...

码:

class Log {
public:
  ...
  std::ostream& debug() { return log(logDEBUG); }  
  std::ostream& endl(std::ostream& out);           // manipulator
  ...
private:
  ... …
Run Code Online (Sandbox Code Playgroud)

c++ stream manipulators

0
推荐指数
1
解决办法
1528
查看次数