89

Azure でホストされている Web サイトがあります。これはメディア ベースであり、JWPlayer を使用して HTTP 疑似ストリーミングでメディアを再生しています。メディア ファイルは、mp4、ogg、webm の 3 つの形式で blob に保存されます。

問題は、メディア ファイルのコンテンツ タイプがすべてのタイプで application/octet-stream として設定されていることです。このため、メディアの再生と進行状況バーにいくつかの問題があります。

blob に保存されているファイルの適切な Content-type (video/mp4、video/ogg、video/webm など) を設定するにはどうすればよいですか?

BLOB インターフェイスに移動して、ファイルごとに手動で実行したくありません。私が気付いていない他の方法があるはずです。おそらく、構成ファイル、設定ファイルなどが並べ替えられます。または、フォルダーに保存されているすべてのファイルの Content-type を設定するためのコード ブロックかもしれません。

助言がありますか?ありがとう

4

8 に答える 8

132

これはうまくいくはずです:

var storageAccount = CloudStorageAccount.Parse("YOURCONNECTIONSTRING");
var blobClient = storageAccount.CreateCloudBlobClient();

var blobs = blobClient
    .GetContainerReference("thecontainer")
    .ListBlobs(useFlatBlobListing: true)
    .OfType<CloudBlockBlob>();

foreach (var blob in blobs)
{
    if (Path.GetExtension(blob.Uri.AbsoluteUri) == ".mp4")
    {
        blob.Properties.ContentType = "video/mp4";
    }
    // repeat ad nauseam
    blob.SetProperties();
}

または、一連の if ステートメントを記述する必要がないように辞書を設定します。

于 2012-04-06T07:36:34.397 に答える
14

これは、適切な Content-Type を使用してビデオを Azure Blob Storage にアップロードする作業例です。

public static String uploadFile(
     CloudBlobContainer container,String blobname, String fpath) {

    CloudBlockBlob blob;
    try {
        blob = container.getBlockBlobReference(blobname);
        File source = new File(fpath);

        if (blobname.endsWith(".mp4")) {
            System.out.println("Set content-type: video/mp4");
            blob.getProperties().setContentType("video/mp4");
        }

        blob.upload(new FileInputStream(source), source.length());

        return blob.getUri().toString();
    } catch (URISyntaxException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (StorageException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return null;
}
于 2013-08-14T11:09:44.110 に答える
0

PHP を使用して、コンテンツ タイプを次のように設定することで、動画をアップロードできます。

$blobRestProxy = ServicesBuilder::getInstance()->createBlobService($connectionString);
//upload
$blob_name = "video.mp4";
$content = fopen("video.mp4", "r");

$options = new CreateBlobOptions();
$options->setBlobContentType("video/mp4");
try {
    //Upload blob
    $blobRestProxy->createBlockBlob("containername", $blob_name, $content, $options);
    echo "success";
} catch(ServiceException $e){
    $code = $e->getCode();
    $error_message = $e->getMessage();
    echo $code.": ".$error_message."<br />";
}
于 2014-03-19T06:52:28.347 に答える