• 大小: 17.59MB
    文件类型: .gz
    金币: 1
    下载: 0 次
    发布日期: 2023-07-03
  • 语言: 其他
  • 标签: live555  h264  rtsp  hi3531  

资源简介

实现将已经成流的H264数据发送到网络(根据示testH264VideoStreamer.cpp修改), 一个线程将H264数据从文件中读取出来放到缓存 live555服务器不停地从缓存中获取数据 live555广播出去

资源截图

代码片段和文件信息

/**********
This library is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the
Free Software Foundation; either version 3 of the License or (at your
option) any later version. (See .)

This library is distributed in the hope that it will be useful but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for
more details.

You should have received a copy of the GNU Lesser General Public License
along with this library; if not write to the Free Software Foundation Inc.
51 Franklin Street Fifth Floor Boston MA 02110-1301  USA
**********/
// Copyright (c) 1996-2018 Live Networks Inc.  All rights reserved.
// Basic Hash Table implementation
// Implementation

#include “BasicHashTable.hh“
#include “strDup.hh“

#if defined(__WIN32__) || defined(_WIN32)
#else
#include 
#endif
#include 
#include 

// When there are this many entries per bucket on average rebuild
// the table to increase the number of buckets
#define REBUILD_MULTIPLIER 3

BasicHashTable::BasicHashTable(int keyType)
  : fBuckets(fStaticBuckets) fNumBuckets(SMALL_HASH_TABLE_SIZE)
    fNumEntries(0) fRebuildSize(SMALL_HASH_TABLE_SIZE*REBUILD_MULTIPLIER)
    fDownShift(28) fMask(0x3) fKeyType(keyType) {
  for (unsigned i = 0; i < SMALL_HASH_TABLE_SIZE; ++i) {
    fStaticBuckets[i] = NULL;
  }
}

BasicHashTable::~BasicHashTable() {
  // Free all the entries in the table:
  for (unsigned i = 0; i < fNumBuckets; ++i) {
    TableEntry* entry;
    while ((entry = fBuckets[i]) != NULL) {
      deleteEntry(i entry);
    }
  }

  // Also free the bucket array if it was dynamically allocated:
  if (fBuckets != fStaticBuckets) delete[] fBuckets;
}

void* BasicHashTable::Add(char const* key void* value) {
  void* oldValue;
  unsigned index;
  TableEntry* entry = lookupKey(key index);
  if (entry != NULL) {
    // There‘s already an item with this key
    oldValue = entry->value;
  } else {
    // There‘s no existing entry; create a new one:
    entry = insertNewEntry(index key);
    oldValue = NULL;
  }
  entry->value = value;

  // If the table has become too large rebuild it with more buckets:
  if (fNumEntries >= fRebuildSize) rebuild();

  return oldValue;
}

Boolean BasicHashTable::Remove(char const* key) {
  unsigned index;
  TableEntry* entry = lookupKey(key index);
  if (entry == NULL) return False; // no such entry

  deleteEntry(index entry);

  return True;
}

void* BasicHashTable::Lookup(char const* key) const {
  unsigned index;
  TableEntry* entry = lookupKey(key index);
  if (entry == NULL) return NULL; // no such entry

  return entry->value;
}

unsigned BasicHashTable::numEntries() const {
  return fNumEntries;
}

BasicHashTable::Iterator::Iterator(BasicHashTable const& table)
  : fTable(table) fNextIndex(0) fN

评论

共有 条评论