小编Mix*_*xaz的帖子

FFmpeg如何将视频写入文件

我想要的是

 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,我必须

  1. 从媒体源读取媒体数据包(可能是真实文件(.avi,mov)甚至是rtsp服务器).
  2. 然后将这些媒体数据包写入真实文件(物理.avi,.mov等文件)

我需要读者和作家.我可以读取媒体源文件(甚至根据给定的格式对数据包进行编码).但是我不能写文件......(任何玩家都可以玩)

还有一些伪代码

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)

c ffmpeg

13
推荐指数
1
解决办法
2万
查看次数

从设备与 sysroot 交叉编译

我使用 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)

linux gcc arm cross-compiling

5
推荐指数
1
解决办法
5990
查看次数

标签 统计

arm ×1

c ×1

cross-compiling ×1

ffmpeg ×1

gcc ×1

linux ×1