我想要的是
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 …Run Code Online (Sandbox Code Playgroud) 我使用 sshfs 将目标设备(Beaglebone Black,ARM arch)的根目录安装到主机上的文件夹,并尝试使用--sysrootGCC 选项进行交叉编译。
但是有一个问题——一些包含头文件不仅位于目标设备上的 /usr/include 文件夹中,还位于其子文件夹中arm-linux-gnueabihf。同样的还有 /usr/lib/arm-linux-gnueabihf 文件夹。
“Hello world”示例无法编译
[gmixaz:/work] $ $CC --sysroot=/work/sysroot h.c
In file included from /work/sysroot/usr/include/stdio.h:27:0,
from h.c:1:
/work/sysroot/usr/include/features.h:364:25: fatal error: sys/cdefs.h: No such file or directory
# include <sys/cdefs.h>
Run Code Online (Sandbox Code Playgroud)
因为sys/cdefs.h位于 /usr/include/arm-linux-gnueabihf 中,而编译器期望它在 /usr/include 中
我的问题是为什么我arm-linux-gnueabihf在 /usr/include 中有那个子文件夹?将部分包含文件(和 /usr/lib/arm-linux-gnueabihf 中的 .so 文件)放入该子文件夹的理由是什么?
在使用 --sysroot 选项进行交叉编译时,我应该如何解决这个问题 - 我是否需要使用 -I 和 -L 编译器选项指定子文件夹,或者有更好的解决方案?我虽然只有 --sysroot 应该足够了,但事实并非如此。那是“按设计”吗?
将文件夹添加到命令行后,我遇到了另一个问题:
[gmixaz:/work] 1 $ $CC --sysroot /work/sysroot3 -I /work/sysroot3/usr/include/arm-linux-gnueabihf -L /work/sysroot3/usr/lib/arm-linux-gnueabihf h.c …Run Code Online (Sandbox Code Playgroud)