flutter.play来自WebSocket的原始h264

sigwle7e  于 2022-11-11  发布在  Flutter
关注(0)|答案(3)|浏览(356)

我正在尝试显示来自视频服务器的实时视频。视频服务器通过WebSocket发送原始的h264视频。我知道这个视频可以在浏览器中播放jmuxer库。现在我只得到h264帧,但我不知道possibility显示它们。我得到了什么:

void getFrames() async {
//some auth stuff
  HttpClientResponse response = await request.close();
  Socket socket = await response.detachSocket();
  WebSocket ws = WebSocket.fromUpgradedSocket(
    socket,
    serverSide: false,
  );
  ws.listen(
    (event) async {      
      print(parse(event)['data']);
    }
}
void main() {
  getFrames();
}

从控制台Uint 8ArrayView中,我得到了如下结果:

[0, 0, 0, 1, 9, 240, 0, 0, 0, 1, 65, 154, 56, 18, 224, 163 ... ]
[0, 0, 0, 1, 9, 240, 0, 0, 0, 1, 65, 154, 84, 5, 184, 31, 114 ... ]
[0, 0, 0, 1, 9, 240, 0, 0, 0, 1, 103, 66, 192, 31, 217, 0, 180 ... ]

所以问题是-我能很容易地把它输入到一些flutter库来显示视频吗?如果可以的话,能得到一些代码示例就更好了,因为我对dart/flutter和视频处理非常-非常陌生。谢谢!
更新:我把这个作为二进制数据转储到文件中,然后把它和ffmpeg混合在一起,比如 ffmpeg -f h264 -i input.raw -c copy out.mp4,这样文件就可以被VLC播放了。也许有一种方法可以在flutter播放器中通过flutter_ffmpeg的帮助来“即时”播放这个文件?

mfpqipee

mfpqipee1#

我正在做一些类似的事情-使用ffmpeg工具包来实时转换一个h264原始字节流,使用ffmpeg输入管道,和VLC播放器来查看HLS输出。
请看我在这篇评论中的例子:https://github.com/tanersener/ffmpeg-kit/issues/460#issuecomment-1156876012
希望这对你有帮助。
P.S.如果您现在已经找到了解决问题的替代方案,请与我们分享🙏

weylhg0b

weylhg0b2#

我非常怀疑是否有dart专用的实现(需要某种平台接口)。
如果您只需要支持web,那么您就是黄金:您可以使用this Package 您提到的jMuxer库。
如果你也需要在其他平台上支持,那么这是一个特殊的情况。“正确的”方法是实现一个Flutter插件,它使用基于平台的适当库。然而,最能保存时间的选择是在headless web view中实现jMuxer的 Package 器,然后使用那个无头的web视图将JS API公开给你的Flutter应用程序。然后可以在许多不同的平台上以相同的方式使用这些代码。

q8l4jmvw

q8l4jmvw3#

我也是一样,我的视频是UDP传输/ MPEG-TS封装/视频编码是h264,我得到了每个网络包的h264部分,我觉得很简单:1.使用2.创建一个新的播放器对象3.不断地向播放器对象馈送h264数据现在看来并非如此
(2)数组的大小;

相关问题