You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

83 lines
1.9KB

  1. #include "flv-reader.h"
  2. #include "flv-writer.h"
  3. #include "flv-demuxer.h"
  4. #include "flv-muxer.h"
  5. #include "flv-proto.h"
  6. #include <assert.h>
  7. #include <string.h>
  8. #include <stdio.h>
  9. static int flv_onmuxer(void* flv, int type, const void* data, size_t bytes, uint32_t timestamp)
  10. {
  11. return flv_writer_input(flv, type, data, bytes, timestamp);
  12. }
  13. static int flv_ondemuxer(void* param, int codec, const void* data, size_t bytes, uint32_t pts, uint32_t dts, int format)
  14. {
  15. flv_muxer_t* muxer = (flv_muxer_t*)param;
  16. switch (codec)
  17. {
  18. case FLV_AUDIO_AAC:
  19. flv_muxer_aac(muxer, data, bytes, pts, dts);
  20. break;
  21. case FLV_AUDIO_MP3:
  22. flv_muxer_mp3(muxer, data, bytes, pts, dts);
  23. break;
  24. case FLV_VIDEO_H264:
  25. flv_muxer_avc(muxer, data, bytes, pts, dts);
  26. break;
  27. case FLV_VIDEO_H265:
  28. flv_muxer_hevc(muxer, data, bytes, pts, dts);
  29. break;
  30. case FLV_VIDEO_AV1:
  31. flv_muxer_av1(muxer, data, bytes, pts, dts);
  32. break;
  33. default:
  34. break;
  35. }
  36. return 0;
  37. }
  38. void flv_read_write_test(const char* flv)
  39. {
  40. static char packet[2 * 1024 * 1024];
  41. snprintf(packet, sizeof(packet), "%s.flv", flv);
  42. void* r = flv_reader_create(flv);
  43. void* w = flv_writer_create(packet);
  44. flv_muxer_t* e = flv_muxer_create(flv_onmuxer, w);
  45. flv_demuxer_t* d = flv_demuxer_create(flv_ondemuxer, e);
  46. //struct flv_metadata_t metadata;
  47. //metadata.audiocodecid = 4;
  48. //metadata.audiodatarate = 16.1;
  49. //metadata.audiosamplerate = 48000;
  50. //metadata.audiosamplesize = 16;
  51. //metadata.stereo = true;
  52. //metadata.videocodecid = 7;
  53. //metadata.videodatarate = 64.0;
  54. //metadata.framerate = 25;
  55. //metadata.width = 1920;
  56. //metadata.height = 1080;
  57. //flv_muxer_metadata(e, &metadata);
  58. int ret, tag;
  59. size_t taglen;
  60. uint32_t timestamp;
  61. while (1 == flv_reader_read(r, &tag, &timestamp, &taglen, packet, sizeof(packet)))
  62. {
  63. ret = flv_demuxer_input(d, tag, packet, taglen, timestamp);
  64. assert(0 == ret);
  65. }
  66. flv_muxer_destroy(e);
  67. flv_demuxer_destroy(d);
  68. flv_reader_destroy(r);
  69. flv_writer_destroy(w);
  70. }