当前位置: 首页 > 知识库问答 >
问题:

将来自网络摄像机(RTSP)的帧保存到mp4文件

危宜
2023-03-14

对于如何将视频流保存到mp4文件中,我相当困惑。我正在使用FFMPEG。让我解释一下问题:

    null

我还认识到,数据包的pts不是连续的,而dts是连续的。我知道B帧,但这在我的情况下是一个问题吗?

// Prepare the output
AVFormatContext* oc = avformat_alloc_context();
oc->oformat = av_guess_format(NULL, "video.mp4", NULL);

// Must write header, packets, and trailing
avio_open2(&oc->pb, "video.mp4", AVIO_FLAG_WRITE, NULL, NULL);

// Write header
AVStream* stream = avformat_new_stream(oc, (AVCodec*) context->streams[video_stream_index]->codec->codec);
avcodec_copy_context(stream->codec, context->streams[video_stream_index]->codec);
stream->sample_aspect_ratio = context->streams[video_stream_index]->codec->sample_aspect_ratio;
avformat_write_header(oc, NULL);

// FOR EACH FRAME...
... av_write_frame(oc, circular[k]); ...

// Write trailer and close the file
av_write_trailer(oc);
avcodec_close(stream->codec);
avio_close(oc->pb);
avformat_free_context(oc);

非常感谢你,

共有1个答案

汪和悌
2023-03-14

第一:当您使用相机时,最好通过RTP over TCP(TCP作为传输协议)工作。要启用此功能:

AVDictionary *ifmtdict;
av_dict_set(&ifmtdict, "rtsp_transport", "tcp", 0);
...
avformat_open_input (..., &ifmtdict);

第二:在数据包开始到来后,等待第一个关键帧,并从这一刻开始写入文件。

 类似资料:
  • 我尝试用python和C++实现代码,结果相同。还尝试另存为。png而不是。jpg。rtsp feed在使用imshow显示相机时工作正常,只有在试图保存帧时才会出现问题。据我所知,这些错误都与ffmpeg有关,但是google对这些类型的错误帮助不大。

  • (希望有人能帮我解决这个问题)非常感谢!!

  • 我想录制我的网络摄像头,但录音要有10秒的片段。所以,我想从我的网络摄像头上记录10秒钟的片段(倒数)。我是FFMPEG的初学者,所以我已经开始搜索如何做到这一点。我发现了一些ffmpeg命令和bellow命令似乎可以,但我有一个问题:它开始录制和保存文件,但我只能打开第一个文件,看到带音频的网络摄像头。其他文件只有音频(尝试用vlc和windows media player打开)。

  • 我是Android Studio的新手。我想通过点击按钮用手机摄像头拍摄照片,然后显示拍摄的照片,照片将自动保存在手机图库中。我在网上找到了一些例子,但我拍摄的照片没有保存在图库中。我已经使用了下面的代码。我能得到一些帮助吗?

  • 我正在寻找一个命令ffmpeg,它保存活的输入(rtmp或hls)到hls m3u8与mp4段文件。我知道这是可能的,即有infohttps://bitmovin.com/hls-news-wwdc-2016/,但我尝试的每个命令都生成ts文件。有人知道解决办法吗?

  • 1. Gradle 2.代码 3、Logcat: 采用gcc 4.9构建。x(GCC)20150123(预发布)配置:---目标操作系统=linux--交叉前缀=/root/bravobit/ffmpeg-android/toolschain-android/bin/arm-linux-androideabi---arch=arm--cpu=cortex-a8--启用运行时cpudetec--sy