当前位置:   article > 正文

windows ffmpeg7 通过rtsp拉取h265裸流

windows ffmpeg7 通过rtsp拉取h265裸流

点击下边那个链接会转到github

下载完成后,添加include、lib到工程。

添加头文件:

  1. extern "C" {
  2. #include "libavcodec/avcodec.h"
  3. #include "libavformat/avformat.h"
  4. #include "libavformat/avio.h"
  5. #include "libswscale/swscale.h"
  6. }

代码:

  1. AVDictionary* options = NULL;
  2. av_dict_set(&options, "buffer_size", "1024000", 0); //设置缓存大小,1080p可将值跳到最大
  3. av_dict_set(&options, "rtsp_transport", "tcp", 0); //以tcp的方式打开,
  4. av_dict_set(&options, "stimeout", "5000000", 0); //设置超时断开链接时间,单位us
  5. av_dict_set(&options, "max_delay", "500000", 0); //设置最大时延
  6. AVFormatContext* pFormatCtx = avformat_alloc_context(); //用来申请AVFormatContext类型变量并初始化默认参数,申请的空间
  7. //打开网络流或文件流
  8. if (avformat_open_input(&pFormatCtx, pUrl, NULL, &options) != 0){
  9. printf("Couldn't open input stream.\n");
  10. return ;
  11. }
  12. //获取视频文件信息
  13. if (avformat_find_stream_info(pFormatCtx, NULL) < 0){
  14. printf("Couldn't find stream information.\n");
  15. return ;
  16. }
  17. //查找码流中是否有视频流
  18. int video_stream_index = -1;
  19. for (int i = 0; i < pFormatCtx->nb_streams; i++) {
  20. if (pFormatCtx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
  21. video_stream_index = i;
  22. }
  23. }
  24. if (video_stream_index == -1) {
  25. printf("video_stream_index = -1\n");
  26. return;
  27. }
  28. AVPacket* packet = (AVPacket*)av_malloc(sizeof(AVPacket)); // 申请空间,存放的每一帧数据 (h264、h265)
  29. FILE* pFile = fopen("test.h265", "wb");
  30. //
  31. while (true){
  32. if (av_read_frame(pFormatCtx, packet) >= 0){
  33. if (packet->stream_index == video_stream_index){
  34. fwrite(packet->data, 1, packet->size, pFile);
  35. }
  36. av_packet_unref(packet);
  37. }
  38. }
  39. fclose(pFile);
  40. av_free(packet);
  41. avformat_close_input(&pFormatCtx);

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/446379
推荐阅读
相关标签
  

闽ICP备14008679号