我试图显示现场视频在扑动来自视频服务器。视频服务器通过websocket发送原始的h264视频。我知道这个视频可以通过jmuxer库在浏览器中播放。现在我只得到h264帧,但我不知道显示它们的可能性。结果:
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();
}
我在控制台输入了Uint8ArrayView:
[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 ... ]
所以问题是-我可以很容易地把它提供给一些扑动库显示视频?如果是这样,这将是很好的得到一些代码示例如何做到这一点,因为我是非常非常新的飞镖/扑动和视频处理。谢谢!
更新:我将其作为二进制数据转储到文件,然后将其与ffmpeg混合,如ffmpeg -f h264 -i输入。raw -c copy out.mp4,使文件可以被VLC播放。可能有一种方法来做这个'上飞'在颤振球员与flutter_ffmpeg的帮助?
我正在做类似的事情-使用ffmpeg-kit使用ffmpeg输入管道实时转换h264原始字节流,并使用VLC Player查看HLS输出。
请看我的例子:https://github.com/tanersener/ffmpeg-kit/issues/460 issuecomment - 1156876012
希望对你有帮助。
注:如果您现在找到了解决问题的替代方案-请分享🙏
我非常怀疑是否有一个只支持dart的实现(并且需要某种平台接口)。
如果你只需要支持web,那么你是黄金:你可以只包装你提到的jMuxer库。
如果你也需要支持其他平台,那就有点特殊了。"correct"方法是实现一个使用基于平台的适当库的Flutter插件。然而,最节省时间的方法是在一个无头web视图中实现jMuxer的包装器,然后使用该无头web视图将JS API暴露给您的Flutter应用程序,然后可以在许多不同的平台上以相同的方式使用。
我也是一样,我的视频是UDP传输/MPEG-TS封装/视频编码是h264。我获得了每个网络数据包的h264部分。我认为这很简单:1。使用2。创建一个新的播放器对象。不断向播放器对象提供h264数据现在看来情况并非如此
var bin = toUint8Array(parDataStr);