- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写客户端-服务器系统,该系统使用 FFMPEG 库将 H.264 流解析为服务器端的 NAL 单元,然后使用信道编码将它们通过网络发送到客户端,我的应用程序必须能够在客户端播放视频.
问题是如何在我的应用程序中将接收到的 AVPackets(NAL 单元)作为视频流播放。我找到了 this tutorial很有帮助,并将其用作服务器端和客户端的基础。
一些与播放视频相关的示例代码或资源不是来自文件,而是来自使用 FFMPEG 库的程序内部数据将非常有帮助。
我确信收到的信息足以播放视频,因为我尝试将收到的数据保存为 .h264 或 .mp4 文件,并且可以通过 VLC 播放器播放。
最佳答案
我从你的问题中了解到,你有 AVPackets 并且想要播放视频。实际上这是两个问题; 1. 解码您的数据包,以及 2. 播放视频。
要使用 FFmpeg 解码您的数据包,您应该查看 AVPacket 的文档, AVCodecContext和 avcodec_decode_video2获得一些想法;一般的想法是你想做一些事情(只是在浏览器中写这个,用一粒盐):
//the context, set this appropriately based on your video. See the above links for the documentation
AVCodecContext *decoder_context;
std::vector<AVPacket> packets; //assume this has your packets
...
AVFrame *decoded_frame = av_frame_alloc();
int ret = -1;
int got_frame = 0;
for(AVPacket packet : packets)
{
avcodec_get_frame_defaults(frame);
ret = avcodec_decode_video2(decoder_context, decoded_frame, &got_frame, &packet);
if (ret <= 0) {
//had an error decoding the current packet or couldn't decode the packet
break;
}
if(got_frame)
{
//send to whatever video player queue you're using/do whatever with the frame
...
}
got_frame = 0;
av_free_packet(&packet);
}
这是一个非常粗略的草图,但这是解码 AVPackets 问题的一般思路。至于你播放视频的问题,你有很多选择,这可能更多地取决于你的客户。你问的是一个相当大的问题,我建议你熟悉 FFmpeg 文档和在 the FFmpeg site 提供的示例。 .希望这是有道理的
关于c++ - 如何使用 FFMPEG 从存储为视频 AVPackets 的 NAL 单元播放 H.264 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15938469/
嗨,我正在尝试使用 OpenMax 组件和来自 GitHub 的 hello_video 示例解码视频. 我只需编辑 video.c 并替换 AVFormat 上的“main frame while”
我现在正在处理一个 FFmpeg 项目,我必须存储 AVPacket 的数据来自av_read_frame , 并将数据填充到新的 AVPacket用于后续解码。 这是我的问题:当我尝试新建和释放 A
我正在使用 ffmpeg 编码器生成 AVPackets,现在我想将它们通过 UDP 发送到另一台计算机并在那里显示它们。问题是我不知道如何将数据包转换为字节并返回。我尝试用此方法复制包: AVPac
我正在使用 android NDK 和 FFmpeg native 库开发解码器。我已经使用 Android 工具为项目提供了原生支持,并且我在 videodecoder.cpp 文件中有 C 代码。
我有一个基于 Qt 的桌面应用程序,它从网络获取声音流并使用 QAudioOutput 播放它.我想为用户提供音量控制,以便他可以降低音量。我的代码如下所示: float volume_control
我正在使用 ffmpeg 对视频帧进行编码库,生成 AVPacket带有压缩数据。 感谢最近关于 S/O 的一些建议,我正在尝试使用 WebRTC 通过网络发送该帧。图书馆 libdatachanne
我想制作一个 AVPacket 的拷贝,以便以后在需要时对其进行解码。 AVPacket来自音频流。 av_dup_packet 似乎不起作用。 AVPacket 复制构造函数不起作用。 创建我自己的
我有一个存储在 char * 中的压缩图像,我想将它放回 AVPacket,以便我可以将它放入 ffmpeg 解码器。有人可以展示如何做到这一点吗?任何示例或教程将不胜感激。 提前致谢 最佳答案 我向
我在我的应用程序中使用了 FFMPEg 代码,我需要为我的程序获取 FLV 数据包。为此,我使用 avcodec_encode_video2()。我的问题是该函数创建了 AVPacket 数据包,它不
有没有办法在解码之前将一些用户私有(private)数据附加到 AVPacket 以匹配输入 AVPacket 和解码输出 AVFrame?某种AVFrame::opaque。 具体来说,h264 码
我的程序从网络接收 aac 音频流,并使用 ffmpeg 解码流,所以我必须将流数据打包到 AVPacket 结构,我使用局部变量来执行此操作,代码如下: bool OnRecvAACStream(c
我想编写一个必须通过QT UdpSocket 接收udp 数据包的应用程序,数据包由元数据和视频组成。 视频数据与来自 ffmpeg udp 的相同溪流。 我把这个数据包和选择的视频数据分开了,现在我
我编写了一个代码来读取编码域中的视频,并能够检索帧的大小和持续时间等信息。 AVPacket 类由一个变量作为数据组成。我可以阅读它,但由于它是一个咬数组,我不能以可读格式使用它。我想用这个数据与另一
我正在使用 ffmpeg 库。我想知道一个数据包可以占用多少内存。 我调试检查 AVPacket 上的成员,它们似乎都不合理,例如 AVPacket.size,ec。 最佳答案 如果您提供自己的数据缓
有可能知道一个 AVFrame 有多少个 AVPackets 吗? 我想实现一个用户可以反向播放视频的功能。 由于某些原因,我不想将临时数据放在本地文件中,所以我想直接通过 AVPacket 实现它。
我正在使用 FFMPEG 解码 H264 流,我的代码如下 AVFormatContext *pFormatCtx = NULL; AVCodecContext *pCodecCtx = NULL;
我正在开发一种工具,它从网络接收 h.264 实时流(发送方是硬件编码器),缓冲最后 x 分钟并在触发时创建最后 x 分钟的视频文件。 我的工具能够接收实时流,还可以使用 boost::seriali
我希望能够打开带有视频文件的流,并在解码器中发送我自己的数据包,其中包含我以前使用相同编解码器从不同流中存储的数据。就像在解码器中伪造我自己的数据包一样。 我的方法是使用 H.265 将帧编码为数据包
我正在开发使用 FFMPEG API 发送 mpeg2ts 流的应用程序。(avio_open、avformat_new_stream 等) 问题是应用程序已经具有 AAC-LC 音频,因此不需要对音
我在这里指的是这个线程: Muxing AVPackets into mp4 file 那边的问题与我的问题基本相同,第一个答案看起来很有希望。 用户 pogorskiy 提供的源代码(某种伪)似乎完
我是一名优秀的程序员,十分优秀!