我想要的是什么:
1. Get video packet from stream source
2. Decode it
3. And write that decoded data as video file(avi, mpeg etc)
我能够从文件中获取视频数据包(作为AVPacket),并且可以对其进行解码并保存为图像(原始格式)(FFmpeg教程显示如何实现)。但是,我不知道如何将该视频数据写入到媒体播放器(例如VLC)可以播放的文件中。
最好提供真实的代码示例......
我现在使用av_interleaved_write进行测试,但是出现了奇怪的错误“非单调时间戳”(我无法控制媒体源的pts值)。
一些额外信息
在FFmpeg中,我需要执行以下操作:
- 从媒体源(可能是实际文件(.avi、.mov)或甚至rtsp服务器)中读取媒体数据包。
- 然后将这些媒体数据包写入实际文件(物理 .avi、.mov 等文件)中。
我需要一个读取器和一个写入器。我可以读取媒体源文件(甚至根据给定格式编码数据包)。但是我无法写入播放器可以播放的文件中。
以下是一些伪代码:
File myFile("MyTestFile.avi");
while ( source ->hasVideoPackets)
{
packet = source->GetNextVideoPacket();
Frame decodedFrame = Decode(packet);
VideoPacket encodedPacket = Encode( decodedFrame);
myFile.WriteFile(encodedPacket);
}
或者只需编写原始文件而不进行编码解码操作。
File myFile("MyTestFile.avi");
while ( source ->hasVideoPackets)
{
packet = source->GetNextVideoPacket();
myFile.WriteFile(packet);
}
那么。I can able to open MyTest.avi file with a player.