在解复用数据包中找不到 NAL 开始
No NAL start found in demuxed packet
我一直在使用 PyAV 和 aiortc 来设置使用 webrtc 的视频流。
我想重新打包数据包并在不转码的情况下发送它们。我遇到的问题是 aiortc 是 av_read_frame 调用不会生成 NAL 启动序列,之后 aiortc 在尝试查找时失败。
我做了一个测试,打印每个包装器的第一个开头:
import av
container = av.open(file="jellyfish.mkv", format="matroska", mode="r")
video_stream = [x for x in container.streams if x.type == "video"]
for i in range(4):
packet = next(container.demux(video_stream))
s = bytes(packet)[0:8]
print(s)
产生了:
b'\x00\x00\xb5\xbae\x88\x80@'
b'\x00\x00A:A\x9a\x02\r'
b'\x00\x00\x18\xe2\x01\x9e\x04\x05'
b'\x00\x00\x19E\x01\x9e\x04\t'
所以似乎有某种启动代码,但不是为 NAL 启动指定的启动代码(0x000001 或 0x00000001):
有人知道这里出了什么问题吗?
MKV 不使用 annexb,而您使用的任何打包程序都使用。您必须将尺寸转换为起始代码。
读这个; Possible Locations for Sequence/Picture Parameter Set(s) for H.264 Stream
我一直在使用 PyAV 和 aiortc 来设置使用 webrtc 的视频流。 我想重新打包数据包并在不转码的情况下发送它们。我遇到的问题是 aiortc 是 av_read_frame 调用不会生成 NAL 启动序列,之后 aiortc 在尝试查找时失败。
我做了一个测试,打印每个包装器的第一个开头:
import av
container = av.open(file="jellyfish.mkv", format="matroska", mode="r")
video_stream = [x for x in container.streams if x.type == "video"]
for i in range(4):
packet = next(container.demux(video_stream))
s = bytes(packet)[0:8]
print(s)
产生了:
b'\x00\x00\xb5\xbae\x88\x80@'
b'\x00\x00A:A\x9a\x02\r'
b'\x00\x00\x18\xe2\x01\x9e\x04\x05'
b'\x00\x00\x19E\x01\x9e\x04\t'
所以似乎有某种启动代码,但不是为 NAL 启动指定的启动代码(0x000001 或 0x00000001):
有人知道这里出了什么问题吗?
MKV 不使用 annexb,而您使用的任何打包程序都使用。您必须将尺寸转换为起始代码。
读这个; Possible Locations for Sequence/Picture Parameter Set(s) for H.264 Stream