我想要的是
1. Get video packet from stream source
2. Decode it
3. And write that decoded data as video file(avi, mpeg etc)
Run Code Online (Sandbox Code Playgroud)
我可以从文件中获取视频数据包(如AVPacket),也可以解码并保存为图像.(原始)(FFmpeg教程显示如何操作). 但我不能(不知道)将视频数据写入可由媒体播放器(如VLC)播放的文件(其他).
最好的祝愿
Ps:如果可能的话,真正的代码样本会很棒......
现在我用av_interleaved_write进行测试, 但我得到了奇怪的错误"非单调时间戳"(我无法控制媒体源的pts值)
一些额外的信息
在FFmpeg,我必须
我需要读者和作家.我可以读取媒体源文件(甚至根据给定的格式对数据包进行编码).但是我不能写文件......(任何玩家都可以玩)
还有一些伪代码
File myFile("MyTestFile.avi");
while ( source ->hasVideoPackets)
{
packet = source->GetNextVideoPacket();
Frame decodedFrame = Decode(packet);
VideoPacket encodedPacket = Encode( decodedFrame);
myFile.WriteFile(encodedPacket);
}
Run Code Online (Sandbox Code Playgroud)
或者只是编写没有编码解码的原始文件
File myFile("MyTestFile.avi");
while ( source ->hasVideoPackets)
{
packet = source->GetNextVideoPacket();
myFile.WriteFile(packet);
}
Run Code Online (Sandbox Code Playgroud)
然后
I can able to open MyTest.avi file with a player.
Run Code Online (Sandbox Code Playgroud)
Mai*_*ter -1
我在某个时候使用 libx264 和 vorbis 做了类似的事情。
代码示例。 https://github.com/Themaister/SSNES/blob/master/record/ffemu.c
AVFrame基本思想是,当您想要对其进行编码时,您必须自己设置时间戳。然后你可以拿起那个数据包并用 写入它av_interleaved_write()。